-
[백준 Node.js] 2562번 최대값To infinity/Coding Practice 2021. 6. 23. 07:02
2021.06.22
Question
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자체를 변경한다는 의미인가봄.
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