반응형
SMALL
알고리즘 태그
[정렬]
태그 설명
정렬이란 데이터의 집합을 어떠한 기준의 대소관계를 따져 일정한 순서로 줄지어 세우는것
문제
백준 문제 - 카드
링크: 카드
문제설명
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다.
준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.
예제 입력
6
1
2
1
2
1
2
예제 출력
1
📃 소스코드 및 설명
N = int(input())
dict_number ={}
for i in range(N) :
card = int(input())
if card in dict_number:
dict_number[card] += 1
else :
dict_number[card] = 1
sorted_dict = sorted(dict_number.items(), key = lambda item: (-item[1], item[0]))
print(sorted_dict[0][0])
이 문제는 람다를 사용해서 손쉽게 구할 수 있다.
일단 람다를 통해서 내가 원하는 값을 기준으로 정렬하는 방법부터 배워보자
# 아래와 같은 리스트가 있을때,
# 두번쨰를 기준으로 오름차순 혹은 내림차순으로 정렬을 하고 싶다면?
example_list = [(0,3),(1,2),(2,7),(3,5),(4,1)]
# 아래와 같이 처리된다.
sort_example_list = sorted(example_list, key=lambda x: x[1])
# >>> [(4,1),(1,2),(0,3),(3,5)(2,7)]
# 만약 여기서 내림차순으로 바꾸고 싶다면?
# 아래와 같이 조건에 '-'를 붙여주면 내림차순으로 정렬할 수 있다.
sort_example_list = sorted(example_list, key=lambda x: -x[1])
자! 이제 위 방법을 토대로 코드를 분석해보자면
N = int(input())
dict_number ={}
for i in range(N) :
card = int(input())
if card in dict_number:
dict_number[card] += 1
else :
dict_number[card] = 1
# dict을 통해 key, value로 생성한 후
# 첫번째: value값을 기준으로 내림차순으로 정렬한다
# 두번째: 동일한 값이 있을 경우에는 key갑이 작은것을 선택해야하므로 오름차순으로 정렬해주면 된다.
sorted_dict = sorted(dict_number.items(), key = lambda item: (-item[1], item[0]))
print(sorted_dict[0][0])
# 참고로 처음에는 선택지를 위의 방법과 반대로 value값을 오름차순으로, key값을 내림차순으로 정렬하고,
# reverse 옵션을 사용해서 답을 제출했는데, 시간이 초과되는 문제가 있었다.
반응형
LIST
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[BOJ][Python] 7795번 - 먹을 것인가 먹힐 것인가[정렬- 실버 3티어] (0) | 2022.03.13 |
---|---|
[BOJ][Python] 2108번 - 통계학[정렬- 실버 3티어] (0) | 2022.03.13 |
[BOJ][Python] 10816번 - 숫자카드2[정렬- 실버 4티어] (0) | 2022.03.13 |
[BOJ][Python] 10815번 - 숫자카드[정렬- 실버 4티어] (0) | 2022.03.13 |
[BOJ][Python] 1026번 - 보물[정렬- 실버 4티어] (0) | 2022.03.12 |