내용을 보면,가장 많이 팔린 책을 출력하면 되는 간단한 문제이다. 예를 들어 예제 입력1에서 top이 4번 나왔고,kimtop이 허1번 나왔으면, top이 가장 많이 나왔으니 top을 출력하면 되는 것이다.
이 문제는 가장 많이 등장한 문자열을 출력하는 문제이므로, 어떠한 원소를 나왔는지 안나왔는지를 구분하기 위해
set() 자료형이나 Dictionary()자료형을 이용할 수 있다. 이 문제 같은 경우, 나온 횟수를 세어야 하기 때문에 Dictionary() 자료형을 이용한다. 횟수를 계산할 때는 Dictionary()를 이용하면 효과적이다.
n = int(input())
books = {}
for _ in range(n):
book = input()
if book not in books:
books[book] = 1
else:
books[book] += 1
target = max(books.values())
array = []
for book, number in books.items():
if number == target:
array.append(book)
print(sorted(array)[0])
책이 등장한 횟수를 세기 위해서 books = {} 라고 하나의 dictionary자료형을 만들었다.
그 다음 데이터를 입력 받을 때 마다. 해당 책이 dictionary에 들어있지 않다면 1로 설정한다. 이유는 하나의 책이 새로 들어온 것이니까. 그다음, 해당 책이 한번이라도 등장한 경험이 있다면 등장횟수에 1을 더해주는 것이다.
for _ in range(n):
book = input()
if book not in books:
books[book] = 1
else:
books[book] += 1
이 코드를 수행하게 되면 책이 등장한 횟수만큼 1을 더해주게 된다.
그 다음, 해당 books를 값을 기준으로 정렬을 해서, 가장 큰 값을 가져오는 것이다. max를 가장 큰 함수를 가져오는 함수니까 target에 넣는다. 이 코드를 예를 들자면, 예제출력 1에서 보았던 top에서 4번 등장한 횟수가 가장 많았던 것처럼 top이 출력되는 것이다.
for book, number in books.items():
if number == target:
array.append(book)
여기서 등장횟수가 가장 큰 것과 동일 하다면 array에다가 담고, 사전 순으로 가장 책의 이름이 앞 쪽에 있는 것을 출력하게 만들도록, sorted 로 print했다.
개인적으로는 난이도가 조금 있어서, 연습 해야겠다.
'코딩테스트' 카테고리의 다른 글
BACKJOON 1236번 (성 지키기) (0) | 2023.06.05 |
---|---|
BACKJOON 1668번 (트로피 진열) (0) | 2023.06.05 |
BACKJOON 1568번 ( 새 ) (0) | 2023.06.05 |
BACKJOON 1543번 (문서 검색) (0) | 2023.06.05 |
BACKJOON 2751번 (수 정렬하기 2) (0) | 2023.06.05 |