반응형

11652

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

[정답1]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
dic = {}
= int(sys.stdin.readline())
for n in range(N):
    a = int(sys.stdin.readline())
    if a in dic.keys():
        dic[a] += 1
    else:
        dic[a] = 1
 
    if n == 0:
        temp = a
    if dic[temp] == dic[a]:
        temp = min(temp, a)
    elif dic[temp] < dic[a]:
        temp = a
print(temp)
cs

.

.

.

[정답2]

1
2
3
4
5
6
7
8
9
10
11
import sys
dic = {}
= int(sys.stdin.readline())
for n in range(N):
    a = int(sys.stdin.readline())
    if a in dic.keys():
        dic[a] += 1
    else:
        dic[a] = 1

dic = sorted(dic.items(), key = lambda x: (-x[1], x[0]))
print(dic[0][0])
cs

.

.

.

[풀이]

최대 최소 비교하는 쉬운 문제다. [정답1]로 후딱 풀었다.

후에 [정답2]처럼 sorted()를 이용해서 간략화할 수 있다는 것을 알게 되었다.

 

dictionary, sorted(), key, lambda 등에 익숙하지 못해 조금 해맸다.

dictionary도 sorted()를 이용하여 정렬을 할 수 있다.

items를 입력값으로 받고, 정렬 기준 key를 lamda를 이용하여-x[1], x[0]순으로 한다.

즉, x[1] (카드의 개수)의 -(내림차순)으로 정렬하고

x[0] (카드 숫자)의 오름차순으로 정렬한다.

 

하단부터 [정답1], [정답2]

각각의 방법마다 메모리 효율, 시간 효율 장점이 있다.

 

p.s.

쉬운 문제로 기본을 다지는게 도움이 된다.

반응형

+ Recent posts