첫째 줄에 정수의 개수N(1<=N<=1,000,000)
둘째 줄에 N개의 정수가 공백으로 구분되어 주어짐
정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력하라.
5
20 10 35 30 7
ouput: 7 35
array.sort() 함수 이용하여 오름차순으로 정렬하여 array[0]과 array[n-1] 출력한다.
const [n,...arr]=require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(Number);
arr.sort((a,b)=>a-b);
console.log(arr[0], arr[n-1]);
min, max 변수를 선언하고 for문을 돌면서 각 인덱스의 값과 비교하여 더 작은값을 min에 더 큰 값을 max에 업데이트 해준다.
const [n,...arr]=require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(Number);
let min=arr[0];
let max=arr[0];
for(let i=0;i<n;i++){
min>arr[i]&&(min=arr[i]);
max<arr[i]&&(max=arr[i]);
}
console.log(min,max);
Math.min(), Math.max() 함수와 spread syntax(...)를 이용하여 배열 안의 min, max를 구한다.
const [n,...arr]=require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(Number);
console.log(Math.min(...arr),Math.max(...arr));
콘솔로 테스트 케이스를 만들어 확인해 보면 결과가 맞게 출력되는데, 백준에서 돌리면 런타임 에러(StackSizeExceeded)가 난다. 뭐가 문제인 걸까?🤔
(혹시 어디가 잘못된지 아시는 분 계신다면 댓글 부탁드립니다.😭)
비교 함수를 전달하지 않으면 요소를 문자열로 변환하고 유니코드 포인트 순서로 문자열을 비교하여 정렬한다.
비교 함수가 있으면 그 함수의 반환 값에 따라 배열의 요소를 정렬한다.
compareFunction(a,b)
< 0 => a, b 순으로 정렬compareFunction(a,b)
= 0 => 순서 변경 XcompareFunction(a,b)
> 0 => b, a 순으로 정렬즉 주어진 함수의 결과값이 양수면 앞뒤 순서를 바꿔준다고 생각하자.
array.sort((a,b)=>a-b)
array.sort((a,b)=>b-a)
Math.min()
: 주어진 숫자들 중 가장 작은 값 반환
Math.max()
: 주어진 숫자들 중 가장 큰 값 반환
Spread syntax(...)를 이용하여 배열 안의 값들을 복사해와 해당 함수에 넣어주면 배열 안 숫자값들의 min과 max를 구할 수 있다.
const arr=[1,4,5,6,1,73,2];
console.log(Math.max(...arr)); // 73
평소console.log(
${변수1} ${변수2});
처럼 출력해 왔었는데, 생각해보니console.log(변수1, 변수2);
만 해도 공백으로 구분된다는 점을 놓치고 있었다.
다음부터 굳이 백틱을 안 써도 되는 것들은 콤마로 구분해서 출력해야겠다.