-
[백준 Node.js] 2562번 최대값To infinity/Coding Practice 2021. 6. 23. 07:02
2021.06.22

Question
2562번: 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어
www.acmicpc.net
Answer code
let fs = require('fs'); let input = (process.platform === 'linux' ? fs.readFileSync('/dev/stdin').toString() :`3 29 38 12 57 74 40 85 61`).split('\n').map(el=>+el); let max = Math.max.apply(null, input) let order = (input.findIndex(input => input === max)) + 1; console.log(max + '\n' + order);
How to solve?
1st Trial.
하나의 배열로 만들어서 sort 오름차순으로 정렬한 후
첫번째 인덱스 값이 배열에서 몇번째 위치하는지 확인
1. 하나의 배열로 만들기: split('\n')
- split means String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눔.
즉, '\n'을 기준으로 구분해서 배열로 만듦
2. 최대값을 찾기위해 변수 input 내의 원소타입을 Number로 바꿔주고 내림차순으로 정렬
3. 아, 좀 빨리 푸나했더니 왜 arr[1]과 max가 false지?
- debugging모드로 확인해보니 arr을 내림차순으로 정렬해서 원본배열이 바뀌어버림. sort 메서드 사용법
4. 원본배열을 유지하려고 새로운 변수에 할당했지만, 디버깅모드로 보니 말 그대로 '원본배열'이 바뀌어서 그런지 local변수에 들어간 배열이 모두 바뀌어버림. 원본배열을 변경한다는건 아예 base자체를 변경한다는 의미인가봄.

기존변수input와 복사한 변수 arr모두 내림차순으로 변경됨. 2nd Trial.
반복문 사용
그렇다면, 결국 for문을 사용해서 최대값을 찾는 수 밖에.
let max = input[0]; let order; for (let i = 0; i < input.length; i++) { if (input[i] > max) { max = input[i]; order = i+1; } } console.log(max + '\n' + order);대체 뭐가 틀린걸까.
뭔가 VS CODE보다 백준이 더 STRICT한 느낌이 든다. 왜 VS CODE에선 돌아가는데 백준에선 안 돌아가는거지?
3rd Trial.
배열 메서드 사용
배열 메서드를 한번 사용해봐야겠다.
let max = Math.max.apply(null, input) let order = (input.findIndex(input => input === max)) + 1; console.log(max + '\n' + order);된다! 됐다! 오오오오오!!
하지만 대체 위에는 뭐가 틀린건지 잘 모르겠다아....
추후 좀 더 공부하고 나면 오류가 보일까?
한가지 궁금하게 생겼는데 VSC 터미널 창에서 console.log로 조회했을 때 결과값이 노란색으로 나오는 것과 흰색으로 나오는 것의 차이는 뭘까? 숫자인지 문자인지 구분인가? 아 지금 테스트해보니 그렇다.
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js] 4673번 셀프넘버 (함수) (0) 2021.06.26 [백준 Node.js] 2577번 숫자의 개수 (0) 2021.06.23 [백준 Node.js] 10818번 최대값 최소값 (0) 2021.06.22 [백준 Node.js] 1110번 더하기 사이클 (0) 2021.06.22 [백준 Node.js] 10871번 X보다 작은 수 (새로운 문법 시도!) (0) 2021.06.21