티스토리 뷰
반응형
// 1.
const fs = require('fs');
const [ , ...numbers ] = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(num => BigInt(num));
const map = new Map();
// 2.
const result = numbers.reduce((max, curr) => {
// 3.
const now_cards = (map.get(curr) || 0) + 1;
const max_cards = (map.get(max) || 0);
map.set(curr, now_cards);
// 4.
if(now_cards > max_cards) {
max = curr;
} else if(now_cards === max_cards) {
curr < max ?
max = curr : max;
}
return max;
}, 0n);
// 5.
console.log(result.toString());
- 필요한 값들을 numbers 배열에 초기화하고, 정답에 사용할 map을 하나 생성해둔다.
이 때, JS의 최대 값은 2^53 - 1이므로, 문제의 2^62의 크기에 대응하기 위해 map 메소드를 통해 BigInt로 매핑한다. - 모든 입력 값을 순회해야 하므로, reduce 메소드를 reduce((max, curr) => { //... }, 0n); 형태로 사용하였다.
(숫자에 n이 붙는 리터럴은 BigInt를 나타낸다.)
각 순회에서 가장 많이 가지고 있는 카드의 번호는 max 변수로서 사용된다. - curr는 매 반복문에서 확인하는 카드 번호이다. 현재 확인 중인 카드의 번호를 map에서 확인하고, 없는 경우 0으로 초기화한다.
now_cards는 현재 확인 중인 카드이므로 +1을 하여 개수를 카운팅하고, max_cards는 현재 가장 많이 갖고 있는 카드의 개수이다. - 현재 확인 중인 카드의 개수와, 가장 많이 갖고 있는 카드의 개수를 확인하여 최대값인 max를 초기화한다.
만약 카드의 장수가 같다면, 카드의 번호를 비교하여 더 작은 카드 번호로 max를 바꾸어준다. - console.log(result);의 형태로 출력하면 BigInt의 리터럴인 n이 붙은 형태가 된다.
또한, console.log(Number(result)); 형태로 출력할 경우 수치의 유실이 발생하게 된다.
따라서 toString() 메소드를 통해 출력한다.
결과
38520 KB / 304 ms
메모
- 백준의 알고리즘 분류 상 정렬에 해당하는 문제이나, 정렬을 사용하지 않고 풀었다. 당연히 위의 답은 이상적인 풀이가 아닐 것임!
- JS의 최대값을 기억해두어야 겠다! 강타입 언어라면 long long 등을 사용하면 되지만, JS에서는 BigInt 타입을 사용한다고 함.
'Dev. > coding test' 카테고리의 다른 글
[Java] String과 Char 기초 (1) | 2022.02.20 |
---|---|
[BaekJoon] 9461 파도반 수열 (node.js) (0) | 2021.07.12 |
[BaekJoon] 4344 평균은 넘겠지 (node.js) (0) | 2021.07.09 |
[BaekJoon] 11047 동전 0 (node.js) (0) | 2021.07.09 |
[BaekJoon] 1018 체스판 다시 칠하기 (node.js) (0) | 2021.07.09 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Node.js
- IntelliJ
- postgresql
- Java
- terraform
- JEST
- hashicorp
- AWS IoT
- shell
- pgloader
- jQuery
- JPA
- Puppeteer
- Gradle
- Spring Cloud Config
- Database
- kotlin
- Docker
- Vault
- AWS
- react
- javascript
- 코딩테스트
- eureka
- etc
- Linux
- mysql
- spring boot
- RancherDesktop
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함