공부하기/백준

[Python] 백준 풀기 1302 - 베스트셀러

XEV 2023. 1. 7. 23:48

파이썬 백준 1302번

실버 4

https://www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 자료 구조, 문자열, 정렬, 해시를 시용한 집학과 맵

 

 

 

 

 

문제 풀기

리스트에 책의 정보를 모두 입력받고 알파벳 순으로 정렬을 한다.

서로 인접한 리스트인 i-1, i 번째를 각각 비교하면서 동일한 책이면 카운트 +1 을 다른 책이면 카운트를 초기화한다.

카운트의 값이 지금까지 누적된 max_count 보다 커지면 새로이 베스트셀러 책으로 등록을 한다. 이때, 동일한 개수의 베스트셀러는 알파벳 순서로 인해 이전 책 이름이 우선시 된다.

 

 

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline


def fnWhichBookSoldTheMost():
    if len(book_ls) == 1:                       ## 책이 하나일 경우 바로 출력.
        print(book_ls[0])
        
    else:
        book_ls.sort()                          ## 알파벳 순으로 책 정렬 및 동일한 개수 일때를 대비.
        # print(book_ls)          # TEST PRINT
        
        count = 1
        max_count = 1
        best_book = book_ls[0]                  ## 알파벳이 제일 빠른 책으로 초기화.
        for i in range(1, len(book_ls)):
            if book_ls[i - 1] == book_ls[i]:    ## 동일한 책이 연속이라면 카운트 +1.
                count += 1
            elif book_ls[i - 1] != book_ls[i]:  ## 동일한 책 연속이 끊겼다면 카운트 초기화.
                count = 1
            
            if max_count < count:               ## 최대 개수가 신기록을 새웠다면 이를 max_count 에 저장.
                max_count = count
                best_book = book_ls[i]          ## 동일한 최대 개수를 대비하여 알파벳이 제일 빠른 책 저장.
        
        # print(max_count)            # TEST PRINT
        print(best_book)


if __name__ == "__main__":
    n = int(inputdata().strip())
    
    book_ls = []
    for _ in range(n):
        book_ls.append(str(inputdata().strip()))
    # print(book_ls)          # TEST PRINT
    
    fnWhichBookSoldTheMost()