[boj node.js] 10818번 최소, 최대 javascript

V·2021년 12월 3일
0
post-thumbnail

문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

예제 입력 1
5
20 10 35 30 7
예제 출력 1
7 35

내 풀이

두가지 풀이 방법을 생각했다.

  • 배열의 api중의 하나인 sort() 로 정렬해서 마지막 수와 첫 수를 이용하는 것이 첫번째,
  • 두번째는 Math.max()와 Math.min() 의 파라미터에 'Spread Operator'를 활용하여 배열을 전달해 주는 것이다.
    => 두번째가 더 마음에 들 것 같아서 그렇게 해 제출을 했는데 런타임 에러가 났다.
const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split('\n');
const arr = input[1].split(' ').map(v=>+v);
const maxValue = Math.max(...arr);
const minValue = Math.min(...arr);
console.log(`${minValue} ${maxValue}`) 



분명 테스트에서는 잘 돌아가는데 왜 런타임 에러가 날까?

정말 모르겠어서 백준에 질문글을 남겨 답을 알게 되었다. 아마 테스트 예제로 준 것보다 큰 배열이 들어왔을 때 Math.min, Math.max에서 에러가 난 것 같다. 백준에서 테스트를 할 때 얼마나 많은 입력값을 주는지는 모르겠지만 ~10⁷까지의 배열까지만 Math.min, Math.max를 사용할 수 있다는 것 같다. (출처: Stack Overflow)

그래서 결국 처음 생각한 풀이로 풀어야 했음

const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split('\n');
const n = input[0];
const arr = input[1].split(' ').map(v=>+v).sort((a,b) => a - b);
console.log(`${arr[0]} ${arr[n-1]}`);

알고리즘 풀이를 다시 시작하면서 예전에 공부했던 것들이 새록새록 기억이 나고 있는데 애매한 것을 찾아보다가 무슨 말인지 설명이 이해가 안될 때가 많다. javascript에 대한 공부가 더 필요하다고 느끼는 날이다.

profile
블로그 이전중 https://sungbeen.com

0개의 댓글