새소식

Study/Algorithm

[백준] 1302번 베스트셀러 - Node.js/JavaScript

  • -

베스트셀러 

시간 제한 메모리 제한 제출  정답  맞힌 사람 정답 비율
2 초 128 MB 16941 8657 7187 51.248%

문제

김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.

오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.

예제 입력 1 복사

5
top
top
top
top
kimtop

예제 출력 1 복사

top

예제 입력 2 복사

9
table
chair
table
table
lamp
door
lamp
table
chair

예제 출력 2 복사

table

예제 입력 3 복사

6
a
a
a
b
b
b

예제 출력 3 복사

a

예제 입력 4 복사

8
icecream
peanuts
peanuts
chocolate
candy
chocolate
icecream
apple

예제 출력 4 복사

chocolate

예제 입력 5 복사

1
soul

예제 출력 5 복사

soul

출처


 

처음에는 해시를 사용한 집합과 맵 이거 보고,,

해시맵(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]을 리턴!

 

꺄훌~_~ 눈온당

 

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.