본문 바로가기
Algorithm/Baekjoon

백준 10818번

by minhi 2024. 10. 10.

백준 10818번을 토대로 주어진 숫자들의 최대, 최소를 구하는 방법을 정리해보려고 한다.

 

1. min을 주어진 범위의 최댓값으로, max를 주어진 범위의 최솟값으로 설정

let [N, numbers] = require('fs').readFileSync('/dev/stdin').toString().split('\n')

numbers = numbers.split(' ').map(Number)

let max = -1000000
let min = 1000000

for (const number of numbers) {
  if (max < number) max = number
  if (number < min) min = number
}

 

주어진 조건에 따르면 각 정수는 -1,000,000 이상, 1,000,000 이하이므로

 

min을 1,000,000으로, max를 -1,000,000으로 초기화하였다.

 

2. Math 객체의 min, max 메소드

let [N, numbers] = require('fs').readFileSync('/dev/stdin').toString().split('\n')

numbers = numbers.split(' ').map(Number)

max = Math.max(...numbers)
min = Math.min(...numbers)

console.log(`${min} ${max}`)

 

Math 객체의 min, max 메소드는 배열이 아닌 여러 개의 숫자를 입력으로 받아 각각 최솟값, 최댓값을 반환한다.

 

때문에 Math.max(...numbers)와 같이 전개 연산자를 사용해 인수를 전달하였다.

 

3. Array 객체의 sort 메소드

let [N, numbers] = require('fs').readFileSync('/dev/stdin').toString().split('\n')

numbers = numbers.split(' ').map(Number)

numbers.sort((a, b) => a - b)

console.log(`${numbers[0]} ${numbers[N-1]}`)


Array 객체의 sort 메소드는 배열을 오름차순 정렬하여 정렬한 배열을 반환한다.

 

이때 sort 메소드는 배열의 요소들을 문자열로 변환한 후 요소들의 유니 코드를 기준으로 오름차순 정렬하기 때문에

 

문자열을 사전식으로 정렬하거나 숫자를 정렬하기 위해선 인수로 compareFunction을 전달해주어야 한다.

 

compareFunction의 반환값이 음수이면 앞 요소, 뒤 요소 순서로 정렬하고

 

compareFunction의 반환값이 양수이면 뒤 요소, 앞 요소 순서로 정렬한다.

 

예를 들어

numbers.sort((a, b) => a - b)

 

위의 compareFunction은 (a, b) => a - b로, a - b가 음수, 즉 a < b이면 a, b 순서로 정렬하므로 오름차순 정렬이 되고

numbers.sort((a, b) => b - a)

 

위의 compareFunction은 (a, b) => b - a로, b - a가 음수, 즉 b < a이면 a, b 순서로 정렬하므로 내림차순 정렬이 된다.

 

위 코드의 경우 numbers.sort((a, b) => a - b)로 오름차순 정렬 후 최솟값은 numbers[0], 최댓값은 numbers[N-1] 출력하였다.

 

💫 이 문제를 통해 배운 것

주어진 숫자들의 최대, 최소를 구하는 대표적인 방법으로는 다음이 있다.

  •  min을 주어진 범위의 최댓값으로, max를 주어진 범위의 최솟값으로 설정
  •  Math 객체의 min, max 메소드
  •  Array 객체의 sort 메소드

이때 Array 객체의 sort 메소드는 그냥 사용할 경우 우리의 상식과 다른 정렬 결과를 반환하므로 compareFunction을 인수로 전달해주어야 한다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 5597번  (0) 2024.10.29
백준 10810번, 10813번  (0) 2024.10.10
백준 10951번  (0) 2024.10.09
백준 10871번  (3) 2024.10.09
백준 10952번  (0) 2024.10.07