-
[백준 Node.js] 10818번 최대값 최소값To infinity/Coding Practice 2021. 6. 22. 18:58
2021.06.22
Question
10818번: 최소, 최대
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
www.acmicpc.net
Answer code
let fs = require('fs'); let input = (process.platform === 'linux' ? fs.readFileSync('/dev/stdin').toString() :`5 20 10 35 30 7`.split('\n')); let count = Number(input[0]); let num = input[1].split(' ').map((el)=>+el); let max = num[0]; let min = num[0]; for(let i=0; i<count; i++){ if(num[i] > max) max = num[i]; if(num[i] < min) min = num[i]; } console.log(`${min} ${max}`);
How to solve?
1st Trial.] 배열 메소드인 Math.max()를 사용
-> input값을 배열형태로 만들어서 (...arr)을 적용했지만 StackSizeExceeded
-> Math.max.apply를 적용했지만 여전히 같은 오류2nd Trial] sort메서드를 이용해 오름차순으로 정렬해 가장 첫째값괴 마지막 값을 가져오기로 예정
-> 여전히 같은 오류
-> 오류가 발생 한 이유를 여기에서 찾았다. 이유인 즉슨 바로 배열의 범위가 정해지지 않았기 때문. (문제에서 제시한 범위가 설정되지 않음. 그 이상, 이하까지 스캔)
3rd Trial] 중첩 반복문을 사용하기로 함
-> 중첩반복문을 통해 각 값을 서로 순환하며 비교하기로 함 nPr
하지만, 굳이 한번 비교했던 값을 비교할 필요가 없을 것 같아서 j의 초기값은 i+1로 할당함
4th Trial] 반복문 하나만 사용하기로 함
-> 굳이 중첩을 사용할 필요 없을 것 같아서 max, min값을 정해주고 해당 값과 비교하여 큰경우, 작은경우 변수값이 바뀌도록 설정
[Reveiw]
let max = num[0]; let min; for(i=0; i<count; i++){ if(num[i] > max) max = num[i]; else min = num[i]; } console.log(`${min} ${max}`);
이렇게 써도 되지 않을까? 라고 생각했다.
하지만 디버깅을 해보니 max가 아니면 min이 아니더라도 (num[i]가 변수 min 값보다 작지 않아도) 값이 할당되는 문제가 생긴다. (처음 테스트 해봤을 때는 값이 제대로 나와서 왜지? 라고 생각했는데 가장 작은수가 가장 마지막에 있어서 해당값이 min변수에 할당된 것이었다. 가장 마지막 값을 30으로 바꿨더니 min변수에 30이 할당되었다.)
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js] 2577번 숫자의 개수 (0) 2021.06.23 [백준 Node.js] 2562번 최대값 (0) 2021.06.23 [백준 Node.js] 1110번 더하기 사이클 (0) 2021.06.22 [백준 Node.js] 10871번 X보다 작은 수 (새로운 문법 시도!) (0) 2021.06.21 [백준 Node.js] 11021번 A+B -7 (테스트케이스) (0) 2021.06.20