[백준] CLASS 3 달성하기 10일차

이진규·2022년 7월 23일
1

백준(PYTHON)

목록 보기
56/115

1. 좌표 압축(★정렬, 딕셔너리)

링크 : 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=" ")

2. 뱀과 사다리 게임(★BFS)

링크 : 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])
profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글