[Python] 백준 알고리즘 온라인 저지 18870 좌표 압축
https://www.acmicpc.net/problem/18870
문제를 간단하게 설명하자면 좌표를 크기 순으로 0부터 나열하여 같은 좌표는 같은 수를 출력하도록 하는 문제이다.
예를 들면 (5, 6, 7, 8, 5) 를 입력받으면 크기대로 (0, 1, 2, 3, 0)을 출력하면 된다.
코드
import sys
input = sys.stdin.readline
n = int(input())
dic = {}
nums = list(map(int, input().split()))
sNums = sorted(set(nums))
for i in range(len(sNums)):
dic[sNums[i]] = i
for j in nums:
print(dic[j], end=' ')
풀이
이 문제에서 주의하여야 할 점은 중복되는 수가 있다면 같은 수를 줘야 하지만 단순히 sort만을 이용하면 중복 순위로 인해 값이 커지게 된다. 그러므로 set을 이용해 중복 값을 없애는 작업이 필요하다.
순위를 어떠한 방식으로 매길지 고민을 하다 딕셔너리를 이용하여 풀이한 방법이 제일 좋다고 생각했다. (딕셔너리의 특성에 대해서는 따로 정리하였습니다.) - 딕셔너리 자료형(Dictionary) - Python
딕셔너리의 키값을 순위로 이용하여 딕셔너리(dic)에 0부터 추가하는 for문을 작성하였고 다시 원래의 좌표들(nums)를 도는 for문으로 value값을 입력하면 키값을 반환하는 딕셔너리의 특성을 이용하여 문제를 풀이했다.
풀이 결과
'알고리즘' 카테고리의 다른 글
백준 9093번 단어 뒤집기 파이썬 풀이 (0) | 2022.02.03 |
---|---|
백준 10828번 스택 파이썬 풀이 (0) | 2022.01.31 |
백준 10814번 나이순 정렬 파이썬 풀이 (0) | 2022.01.27 |
백준 1181번 단어 정렬 파이썬 풀이 (0) | 2022.01.26 |
백준 11651번 좌표 정렬하기 2 파이썬 풀이 (0) | 2022.01.24 |