For Programmer

백준 18870번 파이썬 문제풀이(정렬 - 좌표 압축) 본문

코팅테스트/백준 문제 모음

백준 18870번 파이썬 문제풀이(정렬 - 좌표 압축)

유지광이 2021. 10. 10. 16:18
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(순번)을 출력한다.

 

 

 

https://wikidocs.net/72

 

4.4 딕셔너리(dict)

오늘 제가 여러분과 함께 공부할 것은 딕셔너리 자료형이예요. 사전을 한번도 못 보신 분은 안 계시죠? **dictionary** n. pl. dictionaries ...

wikidocs.net

 

 

728x90
Comments