처음에는 틀린 코드를 확인하고, 후에 수정하는 방법으로 알아보겠습니다. 아래는 문제입니다.
일단 틀린 코드를 먼저 확인해 보겠습니다.
import sys
from collections import Counter
input = sys.stdin.readline
N = int(input())
data = Counter([map(int, input().split()) for _ in range(N)])
counter = Counter(data)
sorted_list = sorted(counter.items(), key=lambda x:(-x[1],x[0]))
print(sorted_list[0][0])
위 코드에는 몇 가지 문제점이 있습니다. 그 문제점을 확인해 보겠습니다.
- 입력 처리 오류
- 현재 코드는 map(int, input().split())을 사용하여 각 줄의 입력을 처리하고 있지만, 이는 각 줄에 여러 개의 정수가 있을 때 사용합니다. 이 문제에서는 각 줄에 하나의 정수만 입력되기에 수정해야 합니다.
- map(int, input().split())은 각 입력줄에 대한 map 객체를 생성하며 실제 정수값이 아니라, 정수로 변환할 수 있는 iterater입니다. 또한, 이들은 서로 다른 메모리 주소를 가진 고유한 객체입니다.
- 이 상태로 실행시키면 Counter({<map object at ....>: 1, <map object at ....>: 1, <map object at ....>: 1, <map object at ...>: 1, <map object at ...>: 1}) 이런 결과가 나옵니다.
- 이 map 객체들을 직접적으로 서로 비교하기는 어려우며, map 객체를 정수형으로 변환하지 않고 직접 Conter에 넣으면 예상하지 못한 결과가 발생할 수 있습니다.
- 중복된 Counter 사용(1)
이 코드의 문제점을 확인하기 전에 Counter 객체의 특성을 알아보겠습니다.data = Counter([map(int, input().split()) for _ in range(N)]) counter = Counter(data)
- Counter 객체는 딕셔너리의 서브클래스로 딕셔너리의 모든 메서드를 사용할 수 있습니다.
- Counter 객체는 iterable 한 객체를 입력받아 각 요소의 개수를 세어 저장합니다.
- 중복된 Counter 사용(2)
이 코드에서 발생하는 일을 알아보겠습니다.- data는 이미 Counter의 객체입니다.
- counter = Counter(data)에서 새로운 Counter 객체를 만들려고 시도합니다.
- 따라서 Counter 객체를 한 번만 생성하도록 수정해야 합니다.
다음은 수정된 코드입니다.
import sys
from collections import Counter
input = sys.stdin.readline
N = int(input())
data = [int(input()) for _ in range(N)]
counter = Counter(data)
sorted_list = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
print(sorted_list[0][0])
- 입력 처리를 int(input())으로 변경하여 각 줄에서 하나의 정수만 읽을 수 있도록 설정했습니다.
- Conter 객체를 한 번만 생성하도록 수정했습니다.
f | 1 | import sys | f | 1 | import sys |
2 | from collections import Counter | 2 | from collections import Counter | ||
3 | input = sys.stdin.readline | 3 | input = sys.stdin.readline | ||
4 | 4 | ||||
5 | N = int(input()) | 5 | N = int(input()) | ||
n | 6 | data = Counter([map(int, input().split()) for _ in range(N)]) | n | 6 | data = [int(input()) for _ in range(N)] |
7 | counter = Counter(data) | 7 | counter = Counter(data) | ||
8 | 8 | ||||
t | 9 | sorted_list = sorted(counter.items(), key=lambda x:(-x[1],x[0])) | t | 9 | sorted_list = sorted(counter.items(), key=lambda x: (-x[1], x[0])) |
10 | 10 | ||||
11 | print(sorted_list[0][0]) | 11 | print(sorted_list[0][0]) |
Colors
Added |
Changed |
Deleted |
# 이 글의 내용 중 일부는 Perplexity AI의 도움을 방아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더했습니다.
'백준 문제풀이' 카테고리의 다른 글
[백준] 20920번 영단어 암기는 외로워 - Python(1편) (1) | 2024.12.15 |
---|---|
[백준] 1449번 수리공 항승 - Python(1편) (0) | 2024.12.14 |
[백준] 1940번 주몽 - Python(1편) (0) | 2024.12.12 |
[백준] 10825번 국영수 - Python(1편) (1) | 2024.12.12 |
[백준] 11656 접미사 배열 - Python(1편) (0) | 2024.12.11 |