안녕하세요. 성조입니다.
이 문제는 Python 3 버전을 기준으로 풀이됐습니다.
처음에 생각나는 데로 데이터 처리를 하는 로직을 쭉 구현했는데 정답은 나왔습니다. 출제자가 의도하는 해답의 형태로 결과를 얻어냈다는 것이 많이 기뻤지만 코드에 잔 로직이 많았고, 더 좋고, 효율적인 접근 방법이 많이 존재할 텐데 본인이 구현한 코드는 너무 난잡하지만 정답을 풀어냈다는 생각이 들어서 1차 통과 이후 2차 코드에서 가독성 증대를 위한 로직 간략화를 시도했습니다. 그렇게 시간도 줄일 수 있었던 부분이 존재한 문제였습니다.
문제 출처
https://www.acmicpc.net/problem/1302
문제
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
코드
1차 코드
import sys
from collections import Counter
N = int(sys.stdin.readline())
result = []
cnt = {}
for _ in range(N):
result.append(sys.stdin.readline().split())
result.sort()
for i in result:
try:
cnt += i
except:
cnt = i
res = Counter(cnt)
data = res.most_common(n=1)
print(data[0][0])
2차 코드
import sys
N = int(sys.stdin.readline())
result = []
for _ in range(N):
result.append(sys.stdin.readline().split())
result.sort()
print(*max(result, key=result.count))
풀이
1차 코드 풀이
1) 반복할 값을 입력받는다.
2) 빈 리스트와 빈 딕셔너리를 초기화한다.
3) 리스트에 반복해서 값을 입력받는다.
4) i를 result 리스트에 값에 있는 요소를 입력받는다.
5) 값을 카운팅 한다.
6) 가장 많은 값을 출력한 첫 번째 요소를 출력한다.
2차 코드 풀이
list에 값을 추가하고 정렬한다.
이후 key=lambda를 활용하여 정렬된 값 중에 가장 큰 값을 언패킹(*)해서 출력한다.
오타나 이해가 안 가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 최대한 풀이 정비를 해보겠습니다.
부족한 포스팅 읽어주셔서 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Python' 카테고리의 다른 글
[백준 - 10845][Python] 큐 (0) | 2023.02.20 |
---|---|
[백준 - 1874][Python]스택 수열 (0) | 2023.02.19 |
[백준 - 1676][Python] 팩토리얼 0의 개수 (0) | 2023.02.11 |
[백준 - 11931, 15688][Python] 수 정렬하기 4, 5 (0) | 2023.02.10 |
[백준 - 1002 ][Python] 터렛 (0) | 2023.02.09 |