베스트셀러
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞힌 사람 |
정답 비율 |
2 초 |
128 MB |
16941 |
8657 |
7187 |
51.248% |
문제
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
예제 입력 1 복사
5
top
top
top
top
kimtop
예제 입력 2 복사
9
table
chair
table
table
lamp
door
lamp
table
chair
예제 입력 4 복사
8
icecream
peanuts
peanuts
chocolate
candy
chocolate
icecream
apple
처음에는 해시를 사용한 집합과 맵 이거 보고,,
해시맵(hashmap)으로 풀려고 했는데
해시맵에서는 key로 value를 찾는 메소드는 있어도
value로 key를 찾는 메소드가 없어서 다 엎고
그냥 object를 사용해서 풀었다!
const [n, ...books] = require('fs').readFileSync('./input.txt').toString().trim().split('\n')
if (n === 1) console.log(books[0])
let obj = {}
books.forEach(book => {
if(obj[book]) obj[book]++
else obj[book] = 1
})
let answer = Object.entries(obj).sort((a,b) => {
if(a[1] === b[1]) {
return a[0] > b[0] ? 1: -1
}
return b[1] > a[1] ? 1: -1
})
console.log(answer[0][0])
우선 n 이 1이면 바로 리턴해주고
books 배열을 forEach로 돌면서 객체에 하나씩 값을 넣어준다!
obj[book]이 없으면 value를 1로 하고 중복이면 ++을 해준다
그리고 [키, 값] 형태로 다시 배열을 만들어서 sort를 해준다!
만약 값이 같다면 키가 더 빠른 순서로(abcd순) 정렬을 해준다
그렇게 하면
[ [ 'table', 4 ], [ 'chair', 2 ], [ 'lamp', 2 ], [ 'door', 1 ] ]
요런 식으로 answer가 정렬되니까
answer[0][0]을 return하면 된다! key 값을 리턴해야되니까
value를 리턴하고 싶으면 answer[0][1]을 리턴!
꺄훌~_~ 눈온당