[백준] 18870: 좌표 압축 - 파이썬[python]

다인·2024년 9월 26일

백준

목록 보기
66/112
post-thumbnail

문제를 이해해보자

  • 처음엔 문제조차 이해하지 못했다..
  • 좌표 압축이라는 거창한 말을 써서 그렇지 문제 의도는 입력받은 수를 하나하나 돌면서 해당 수보다 작은 수의 개수를 출력하라는 것이다.
  • 어떻게 풀어야할지 감이 안 잡혀서 다음 순서인 집합과 맵을 모두 풀면서 set과 dictionary를 잘 이해할 수 있었다. 다 풀고 다시 이 문제로 넘어왔더니 의도치 않게 set을 사용해야 한다는 것을 바로 깨달을 수 있었다.
  • 그런데 set은 순서가 없다. 얘를 어떻게 해야 할까 고민하다가.. 구글링을 해버렸다..
  • dic를 이용해서 set의 각 수에 인덱스를 부여하더라!!!
  • 이제 이 아이디어로 코드를 구현해 보았다.

코드

import sys

N = int(sys.stdin.readline())
X = list(map(int, sys.stdin.readline().split()))
S = sorted(set(X))
dic = {S[i]:i for i in range(len(S))}

for x in X:
    print(dic[x], end=' ')

시행착오

  1. 처음에 X를 list로 받지 않고 set으로 받았다. 그랬더니 중복이 애초에 없어져서 예시1의 출력값이 2 3 0 3 1이 아닌 2 3 0 1가 나와버렸다.
  2. set은 sorted가 안돼서 list로 변형한 후 sorted를 써야 되는 줄 알았는데 아니더라...!! 뭐지 저번엔 왜 안됐었지...

결과

  • set에도 순서(인덱스)를 부여하는 방법에 대해 알게 된 좋은 문제였다.

0개의 댓글