티스토리 뷰
https://www.acmicpc.net/problem/18870
1. 접근 방식
- 중복되는 수가 존재하며, 중복되는 여러 수는 마치 하나만 존재하듯이 카운팅 되므로 집합 개념을 사용하자.
- 중복 제거된 데이터를 정렬하면, 각 수의 인덱스가 곧 새로운 좌표이다. (파란색 숫자)
- 각 수의 인덱스를 기억하기 위해 딕셔너리를 사용하자. key는 수이고, value는 인덱스이다.
- 이후엔 기존 데이터를 순회하면서 해당 수를 딕셔너리 키로 갖는 value, 즉 인덱스를 출력한다.
2. 정답 코드
n = int(input())
data = list(map(int, input().split()))
compressed = {x: i for i, x in enumerate(sorted(set(data)))}
results = [str(compressed[xn]) for xn in data]
print(' '.join(results))
3. 새로 알게 된 내용
- 리스트 내 원소를 하나씩 출력할 때 반복문과 printf( ) 조합 대신 join( ) 메서드가 더욱 빠르다.
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 10994번 별 찍기 - 19 파이썬 풀이 (0) | 2023.06.23 |
---|---|
[백준] 1913번 달팽이 파이썬 정답 코드 (0) | 2023.06.22 |
[백준] 1431번 시리얼 번호 파이썬 정답 코드 (0) | 2023.06.21 |
[백준] 17413번 단어 뒤집기 2 파이썬 정답 코드 (0) | 2023.06.13 |
[백준] 2477번 참외밭 파이썬 정답 코드 (0) | 2023.06.11 |