For Programmer
백준 18870번 파이썬 문제풀이(정렬 - 좌표 압축) 본문
728x90
코드
import sys
from collections import Counter
n = int(input()) # 문자열로 숫자를 입력받는다.
array = list(map(int, input().split()))
array2 = sorted(set(array)) # array를 set형으로 바꿔 중복을 제거한 후 다시 정렬하여 리스트로 반환
array3 = {array2[i]: i for i in range(len(array2))} #dictionary자료형을 이용해야한다.(key,value 형태로저장이됨)
for i in array:
print(array3[i], end=" ")
# dict형은 순서가없는 hashmap형태이기 때문에 array3['찾고자하는 자료형']을 하면 해당하는 value 값을 리턴
print(*[array3[i] for i in array])
#다음과 같이 출력이 가능 여기서 * 는 컨테이너타입(리스트,셋 등등)의 내부를 unpacking할때 사용된다.
-> 이문제는 dict자료형을 쓰지 않는다면 시간초과가 날 확률이 높다. dict자료형에 대한 소개는 밑의 링크로 달아 놓겠다.
1.우선 입력받은 값들을 저장한 리스트를 중복을 제거하기위해 set자료형에 담아준다.
2. 그것을 다시 sorted함수를 이용하여 오름차순으로 정렬하여 새로운 리스트를 하나를 만든다.
3. 그 후 hashmap형태로 저장하는 dict자료형에 입력받은값과 해당값의 순번을 key:value 형식으로 저장을 한다.
4. 마지막으로 처음에 입력받은 값을 일일이 dict자료형과 비교하면서 입력받은값에 저장되어있는 value(순번)을 출력한다.
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 17427번 파이썬 문제풀이(수학 - 약수의 합2) (0) | 2021.10.11 |
---|---|
백준 4375번 파이썬 문제풀이(수학 - 1) (0) | 2021.10.11 |
백준 10814번 파이썬 문제풀이(정렬 - 나이순 정렬) (0) | 2021.10.10 |
백준 1181번 파이썬 문제풀이(정렬 - 단어 정렬) (0) | 2021.10.10 |
백준 11650,11651번 파이썬 문제풀이(정렬 - 좌표 정렬하기 1,2) (0) | 2021.10.09 |
Comments