본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 11652 카드

문제 리뷰

확실히 정렬 문제들을 오랜만에 푸는 것 같다.

 

sort 사용 방법을 많이 잊어버려서 하나 하나 검색해서 푼 것 같다.

 

그래도 다행히 기억이 남아 있어서 검색창에 입력하는 동안 기억이 되살아나서 풀고 그랬던 것 같다.

 

import sys
input = sys.stdin.readline

n = int(input())

cards = {}

for i in range(n):
  num = int(input())
  if num in cards:
    cards[num] += 1
  else:
    cards[num] = 1

d = dict(sorted(cards.items(), key=lambda item: (item[1], -item[0]), reverse=True))

print(list(d)[0])

 

다시 기억 되살릴 것

 

1. dictionary 를 value 기준으로 정렬하기

: dict.items() 를 사용해서 배열인것처럼 정렬 가능(진짜 배열은 아님), key : value 쌍이 [key, value] 쌍으로 쓰이기에 index로 접근 가능하다. 

: 다시 보니 dict로 다시 전환했다가 list로 또 바꿔줄 필요있나 싶기도 하다.

: 아래가 그걸 고친 부분

d = sorted(cards.items(), key=lambda item: (item[1], -item[0]),reverse=True)

print(d[0][0])

 

2. key 가 여러 개일 때 다른 순서로 정렬하기.

 

: 꽤 많이 접한 문제케이스인데 간만에 보니 어리벙벙해져서 기억이 안 났다.

: 검색창 열어서 쿼리 작성하다보니 갑자기 다시 방법이 스쳐서 옳게 풀었다.

 

: 제일 최우선되는 키를 기준으로 reverse True/False를 정하고,

  만약 그것에 대치되는 순서라면 key에 들어갈 값을 음수로 만들면 된다. ( - 달면 됨~)

 

 

이런 문제는 진짜 메인이 아니라 기본으로 착착해야한다. 잊지 말자! 반복반복