내용을 보면,가장 많이 팔린 책을 출력하면 되는 간단한 문제이다. 예를 들어 예제 입력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

+ Recent posts