1302 [map & dictionary]

2022. 5. 5. 01:03Algorithm/BOJ

문제

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

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

입력

첫째 줄에 오늘 하루 동안 팔린 책의 개수 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

풀이

문제에서 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력해야 되므로 key와 value값이 있는 map함수나 dictionary함수를 이용해야 된다.

책의 제목[string]을 key값으로 지정하고 가장 많이 팔린 책의 제목을 알기 위해 팔린 책의 개수를 value값[int]으로 지정해야 된다.

접근방법으로는 먼저 넣을 책의 범위를 설정하고 책의 제목을 input 해주며 이미 dictionary에 있는 책은 value값을 누적해서 더해주고 아예 새책이라면 누적이 필요없이 그냥 1을 더해준다.

value 값이 최대인 key값을 찾아주고 key값이 여러개일 수 있으니 다음 key값을 임시의 배열에 저장을 해준다.

조건문에 value값이 최대인 key값을 candidate라는 임시배열에 저장한다음 알파벳 순으로 우선순위가 높은 것을 출력해야 되므로 sort()함수로 오름차순정렬을 한 다음 candidate 배열의 첫번째 인덱스값을 출력하면 될 것 같다.

 

#map
#key->책이름(string)
#value->팔린권수(int)
d = dict() # dictionary 생성
for i in range(int(input())):
   book = input() # 책 이름 저장
   if book in d: # 이미 dictionary에 있는 책이라면
      d[book] += 1 #기존에 있던 책 value값 +1
   else: # 새로들어온 책이라면
      d[book] = 1 #새로 들어온 책 value값 +1

#print(d.keys()) # 키값만 모아서 반환해줌
big = max(d.values())  # dictionary에 있는 최대 value값 저장
#print(d.values()) value값만 모아서 반환해줌
#print(d.items()) # 키 + value값을 묶어서 반환해줌
candidate = [] # value가 최대값인 책 저장공간
for key, val in d.items():
   if val == big: # value값이 최대값이라면
      candidate.append(key) # value가 최대값인 key값을 candidate 배열에 저장
candidate.sort() # 알파벳 순으로 출력하기 위해 오름차순으로 정렬
print(candidate[0]) # 가장 먼저오는 알파벳 값인 key값 출력

'Algorithm > BOJ' 카테고리의 다른 글

11047 [그리디]  (0) 2022.05.06
2309 [완전탐색(조합)]  (0) 2022.05.06
2164 [큐]  (0) 2022.05.04
9012 [스택]  (0) 2022.05.04
2920  (0) 2022.04.01