728x90
문제 링크: https://www.acmicpc.net/problem/18870
문제 풀이
set()과 딕셔너리로 풀었다. 먼저 집합으로 만들어서 중복된 숫자들을 지워주고 다시 리스트로 변환했다.
이후 다시 오름차순으로 정렬했는데, 꼭 정렬해줘야 한다. set()은 정렬을 고려하지 않기 때문에 정렬된 상태로 입력을 줘도 정렬이 안 되어 있을 수 있다. 어짜피 그렇게 안줄때도 있어서 하긴 해야한다.
이후 딕셔너리를 하나 만들어주고 반복문을 이용하여 차례대로 만들어준 리스트를 확인해줬다.
0부터 시작해서 가장 작은 숫자는 0, 그 다음은 1, 그 다음은 2, ... 가 출력되게 딕셔너리를 이용해주고, 다시 원래의 리스트로 돌아와서 반복문을 이용해 압축된 좌표로 바꿔주었다.
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n = int(input()) | |
x = list(map(int, input().split())) | |
x2 = list((set(x))) | |
x2.sort() | |
x3 = {} | |
a = 0 | |
for i in x2: | |
x3[i] = a | |
a += 1 | |
for i in range(n): | |
x[i] = x3[x[i]] | |
print(' '.join(map(str, x))) |
여담
맞은 사람 중에 언어 그룹 Python에 들어가면 이 코드가 1등이다. 왜지?
사실 나도 이 문제 풀 당시에 잘 몰라서 검색해본거 같은데...
728x90
'BOJ' 카테고리의 다른 글
[BOJ][Python] 백준 2101번 - 플러그 (0) | 2021.09.22 |
---|---|
[BOJ][Python] 백준 2254번 - 감옥 건설 (0) | 2021.09.22 |
[BOJ][Python] 백준 14621번 - 나만 안되는 연애 (0) | 2021.09.21 |
[BOJ][Python] 백준 2903번 - 중앙 이동 알고리즘 (0) | 2021.09.21 |
[BOJ][Python] 백준 10822번 - 더하기 (0) | 2021.09.21 |