본문 바로가기
백준 문제풀이

[백준] 11652번 카드 - Python(1편)

by arctis7p 2024. 12. 13.

처음에는 틀린 코드를 확인하고, 후에 수정하는 방법으로 알아보겠습니다. 아래는 문제입니다.

더보기
백준 11652번 카드 문제입니다. 클릭하면 링크로 넘어갑니다.

 

일단 틀린 코드를 먼저 확인해 보겠습니다.

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])

위 코드에는 몇 가지 문제점이 있습니다. 그 문제점을 확인해 보겠습니다.

  1. 입력 처리 오류
    • 현재 코드는 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에 넣으면 예상하지 못한 결과가 발생할 수 있습니다.
  2. 중복된 Counter 사용(1)
    data = Counter([map(int, input().split()) for _ in range(N)])
    counter = Counter(data)
    이 코드의 문제점을 확인하기 전에 Counter 객체의 특성을 알아보겠습니다.
    • Counter 객체는 딕셔너리의 서브클래스로 딕셔너리의 모든 메서드를 사용할 수 있습니다.
    • Counter 객체는 iterable 한 객체를 입력받아 각 요소의 개수를 세어 저장합니다.
  3. 중복된 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])
  1. 입력 처리를 int(input())으로 변경하여 각 줄에서 하나의 정수만 읽을 수 있도록 설정했습니다.
  2. 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(intinput().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의 도움을 방아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더했습니다.