알고리즘 문제 풀이

백준 11652 파이썬 풀이

파란색 가운 2023. 5. 7. 17:24
 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

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

준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

입력

첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.

출력

첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.

예제 입력 1 복사

5
1
2
1
2
1

예제 출력 1 복사

1

예제 입력 2 복사

6
1
2
1
2
1
2

예제 출력 2 복사

1

 

import sys
# sys.stdin.readline()
from collections import deque

N = int(sys.stdin.readline())
dic = {}
for i in range(N):
    card = int(sys.stdin.readline())
    if card in dic:
        dic[card] +=1
    else:
        dic[card] = 1

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

 

# key,value 니까 x[1]을 기준으로 정렬 후 key를 기준으로 정렬

 

파이썬을 최근에 접하고 공부하는 나에게 

사전이 무엇인지는 읽어봤지만 처음으로 적용해봤다.

범위가 -2^62 부터 2^62라서 그냥 일반 배열로 풀면 무조건 시간 초과였다.

이럴때 이용할 수 있는게 사전(dic).

key와 Value로 이루어져 있으므로

value가 높은 애가 가장 앞으로 오게하는 역순 정렬이므로 -x[1]

key는 일반적인 정렬이므로 x[0]를 key로 사용하였다.

 

이 문제에서 얻어갈 수 있는 점

1. 사전을 사용하면 key와 value 두가지를 통해 유용하게 사용할 수 있다.

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

항상 이 부분을 먼저 x[0]에 대해 정렬하고 -x[1]에 대해 두번씩 정렬했는데 우선순위를 정할 수 있다는 것을 알아간다. 

'알고리즘 문제 풀이' 카테고리의 다른 글

백준 11724 파이썬 풀이  (0) 2023.05.09
백준 1260 파이썬 풀이  (0) 2023.05.07
백준 11656 파이썬 풀이  (0) 2023.05.07
백준 11655 파이썬 풀이  (0) 2023.05.07
파이썬 10820 풀이  (0) 2023.05.05