BOJ[1302] - 베스트셀러 by JavaScript
베스트셀러
문제
언어
- JavaScript
순서도
- Map 을 이용해서 책의 이름을 key 값으로 해서 판매한 책의 개수를 value 값으로 세어줍니다.
- 그와 동시에, 가장 많이 판매한 책의 개수를 세어줍니다.
- Map 에서 value 값이 가장 많이 판매한 책의 개수와 동일한 책들을 모아서 배열에 넣어줍니다.
- 배열을 사전순으로 정렬하고, 가장 앞에 있는 값을 출력합니다.
문제 풀이 step 1
- 김형택은 탑문고에서 계산을 하는 직원입니다. 근무가 끝나면 오늘 판매한 책 중에서 가장 많이 팔린 책의 제목을 칠판에 적어야 합니다.
- 오늘 하루 동안 팔린 책의 제목이 입력으로 들어올 때, 김형택을 도와서 오늘 가장 많이 팔린 책을 찾아주는 문제입니다.
- 우선 Map 을 선언합니다.
- 오늘 하루 동안 팔린 책들의 제목들을 순회하며, Map 에 책의 제목을 key 값으로 팔린 책의 개수를 value 값으로 해서 기록하며, 가장 많이 팔린 책의 개수를 알아냅니다.
- Map 을 순회하며 value 값이 가장 많이 팔린 책의 개수와 동일한 책들의 제목을 모아서 배열에 넣어줍니다.
- 그 배열을 사전순으로 정렬하고, 가장 앞에 있는 값을 출력하면 정답이 됩니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const n = Number(input[0]);
// Map 선언
const map = new Map();
let max = 0;
// 오늘 하루 팔린 책들의 제목들을 순회하며
for (let i = 1; i < n + 1; i++) {
const key = input[i];
// map 에 key 값은 책의 제목, value 값은 팔린 책의 개수를 저장합니다.
map.set(key, map.get(key) ? map.get(key) + 1 : 1);
// 팔린 책의 개수의 최댓값을 갱신합니다.
max = Math.max(max, map.get(key));
}
const res = [];
// map 에서 value 값이 팔린 책의 개수의 최댓값과 같은 책의 제목들을 모아서 배열에 넣습니다.
for (let [key, value] of map) {
if (value === max) res.push(key);
}
// 배열을 사전순으로 정렬하고 가장 앞에 있는 값을 출력합니다.
return res.sort()[0];
};
console.log(solution(input));