링크 : https://www.acmicpc.net/problem/18870
from sys import stdin
input = stdin.readline
n = int(input())
coord = list(map(int, input().split()))
coord_tmp = list(set(coord)) # 집합으로 변환해 중복값 제거 후 다시 리스트로 변환
coord_tmp.sort()
dic = {}
for idx, value in enumerate(coord_tmp):
dic[value] = idx # 값에 따른 인덱스 값을 딕셔너리에 기록
for i in coord:
if i in dic:
print(dic[i], end=" ")
링크 : https://www.acmicpc.net/problem/16928
from collections import deque
from sys import stdin
input = stdin.readline
n, m = map(int, input().split())
ladder = [ list(map(int, input().split())) for _ in range(n) ]
snake = [ list(map(int, input().split())) for _ in range(m) ]
cnt = [0] * (100+1)
visited = [False] * (100+1)
def bfs(v):
visited[v] = True
q = deque([v])
while q:
node = q.popleft()
if node == 100: # 도착하면 종료
break
for i in (node+1, node+2, node+3, node+4, node+5, node+6): # 주사위를 굴리는 6가지 경우
if i <= 100 and not visited[i]:
for st, en in ladder: # 만약 사다리를 만나면 사다리의 목적지로 이동하고 좌표(i)도 업데이트 해준다.
if i == st:
i = en
for st, en in snake: # 만약 뱀을 만나면 뱀의 목적지로 이동하고 좌표(i)도 업데이트 해준다.
if i == st:
i = en
# 위에서 사다리 또는 뱀을 만나 좌표(i)가 수정될 수 있기 때문에 다시 한번 방문여부를 체크 해준다.
if not visited[i]: # 위에서 사다리, 뱀을 만나 업데이트 되거나 주사위로만 옮겨진 경우 방문처리를 해주고 주사위 횟수를 더해준다.
visited[i] = True
cnt[i] = cnt[node] + 1
q.append(i)
bfs(1)
print(cnt[100])