https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에
www.acmicpc.net
🔷 알고리즘 분류 - 정렬, 값 / 좌표 압축 난이도 - 실버 2
파이썬의 딕셔너리(Dictionary)는 키-값 쌍을 원소로 가지는 자료형입니다.
딕셔너리는 순서를 가지지 않으며, 키를 통해 값을 참조합니다.
딕셔너리는 중괄호 {}를 사용하여 생성하며, 키와 값은 콜론 :으로 구분합니다.
예를 들어, 다음과 같이 딕셔너리를 생성할 수 있습니다.
dict1 = {'apple': 1, 'banana': 2, 'cherry': 3}
딕셔너리에서 키를 사용하여 값을 참조하는 방법은 다음과 같습니다.
print(dict1['apple']) # 출력: 1
딕셔너리에 새로운 키-값 쌍을 추가하는 방법은 다음과 같습니다.
dict1['orange'] = 4
print(dict1) # 출력: {'apple': 1, 'banana': 2, 'cherry': 3, 'orange': 4}
딕셔너리에서 키-값 쌍을 삭제하는 방법은 다음과 같습니다.
del dict1['apple']
print(dict1) # 출력: {'banana': 2, 'cherry': 3, 'orange': 4}
딕셔너리의 모든 키를 가져오는 방법은 keys() 메서드를
모든 값을 가져오는 방법은 values() 메서드를
모든 키-값 쌍을 가져오는 방법은 items() 메서드를 사용합니다.
print(dict1.keys()) # 출력: ['banana', 'cherry', 'orange']
print(dict1.values()) # 출력: [2, 3, 4]
print(dict1.items()) # 출력: [('banana', 2), ('cherry', 3), ('orange', 4)]
딕셔너리는 키의 유일성을 보장하므로, 동일한 키에 대해 여러 값을 가질 수 없습니다.
🔶문제 풀이 - 딕셔너리를 이용한 풀이
# 사용자로부터 정수 n을 입력받음
n=int(input())
# 사용자로부터 n개의 정수를 입력받아 리스트 x를 생성
x=list(map(int,input().split()))
# 리스트 x에서 중복을 제거한 후 정렬하여 새 리스트 sorted_x를 생성
sorted_x=sorted(list(set(x)))
# 딕셔너리 result를 생성하여 각 숫자와 그에 해당하는 인덱스를 매핑
# 예: 만약 sorted_x가 [2, 4, 5]라면 result는 {2: 0, 4: 1, 5: 2}가 됨
result={sorted_x[i]: i for i in range(len(sorted_x))}
# 원래의 수열 x에 대해 각 숫자가 정렬된 리스트에서 몇 번째에 위치하는지 출력
# end=' ' 옵션을 사용하여 결과를 공백으로 구분
for i in x:
print(result[i], end=' ')
🔶 문제 이해하기
# 딕셔너리 result를 생성하여 각 숫자와 그에 해당하는 인덱스를 매핑
# 예: 만약 sorted_x가 [2, 4, 5]라면 result는 {2: 0, 4: 1, 5: 2}가 됨
result={sorted_x[i]: i for i in range(len(sorted_x))}
예를 들어, x = [4, 2, 9, 6, 7]이라고 가정하면, sorted_x = sorted(list(set(x)))는 [2, 4, 6, 7, 9]가 됩니다.
이때, result 딕셔너리는 다음과 같이 생성됩니다.
result = {2: 0, 4: 1, 6: 2, 7: 3, 9: 4}
여기서 키는 sorted_x의 요소이고, 값은 해당 요소의 인덱스입니다.
이렇게 생성한 딕셔너리를 사용하면, sorted_x의 요소가 원래 몇 번째에 위치했는지 쉽게 찾을 수 있습니다.
딕셔너리를 사용하여 푸는 좋은 문제라고 생각합니다!
🤗파이팅입니다~ 여러분!!🤗
'백준 알고리즘' 카테고리의 다른 글
백준 - 1978번 소수 찾기 python 문제풀이 [Hellfer] (2) | 2023.12.06 |
---|---|
백준 - 1330번 두 수 비교하기 python 문제풀이 [Hellfer] (2) | 2023.12.05 |
백준 - 11047번 동전 0 python 문제풀이 [Hellfer] (0) | 2023.12.04 |
백준 - 1546번 평균 python 문제풀이 [Hellfer] (4) | 2023.12.04 |
백준 - 11723번 집합 python 문제풀이 [Hellfer] (2) | 2023.12.02 |
백준 - 1157번 단어 공부 python 문제풀이 [Hellfer] (0) | 2023.12.02 |
백준 - 2630번 색종이 만들기 python 문제풀이 [Hellfer] (0) | 2023.12.01 |
백준 - 1152번 단어의 개수 python 문제풀이 [Hellfer] (2) | 2023.12.01 |