BFS 8

이코테 (파이썬) 아기 상어 풀이

[문제] https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net [풀이] from collections import deque INF = 1e9 # 무한을 의미하는 값으로 10억을 설정 # 맵의 크기 N을 입력받기 n = int(input()) # 전체 모든 칸에 대한 정보 입력 array = [] for i in range(n) : array.append(list(map(int, input().split()))) # 아기 상어의 현재 크기 변..

[DFS/BFS] 이코테 (파이썬) 블록 이동하기 풀이

[문제] 로봇 개발자 "무지"는 한 달 앞으로 다가온 "카카오배 로봇경진대회"에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 무지는 "0"과 "1"로 이루어진 N x N 크기의 지도에서 2 x 1 크기인 로봇을 움직여 (N, N) 위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌표를 (1, 1)로 하며 지도 내에 표시된 숫자 0은 빈칸을, 1은 벽을 나타냅니다. 로봇은 벽이 있는 칸 또는 지도 밖으로는 이동할 수 없습니다. 로봇은 처음에 좌표 (1, 1) 위치에서 가로 방향으로 놓여 있는 상태로 시작하며, 앞뒤 구분 없이 움직일 수 있습니다. 로봇이 움직일 때는 현재 놓여 있는 상태를 유지하면서 이동합니다. 예를 들어..

[DFS/BFS] 이코테 (파이썬) 인구 이동 풀이

[문제] N x N 크기의 땅이 있고, 땅은 1 x 1개의 칸으로 나누어져 있습니다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있습니다. 인접한 나라 사이에는 국경선이 존재합니다. 모든 나라는 1 x 1 크기이기 때문에, 모든 국경선은 정사각형 형태입니다. 오늘부터 인구 이동이 시작되는 날입니다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속됩니다. 1. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 엽니다. 2. 위의 조건에 의해 열어야 하는 국경선이 모두 열렸다면, 인구 이동을 시작합니다. 3. 국경선이 열려 있어 인접한 칸만을 이용해 이동..

[DFS/BFS] 이코테 (파이썬) 경쟁적 전염 풀이

[문제] N x N 크기의 시험관이 있습니다. 시험관은 1 x 1 크기의 칸으로 나누어지며, 특정한 위치에는 바이러스가 존재할 수 있습니다. 바이러스의 종류는 1 ~ K번까지 K가지가 있으며 모든 바이러스는 이 중 하나에 속합니다. 시험관에 존재하는 모든 바이러스는 1초마다 상, 하, 좌, 우의 방향으로 증식하는데, 매초 번호가 낮은 종류의 바이러스부터 먼저 증식합니다. 또한 증식 과정에서 특정한 칸에 이미 어떠한 바이러스가 있다면, 그곳에는 다른 바이러스가 들어갈 수 없습니다. 시험관의 크기와 바이러스의 위치 정보가 주어졌을 때, S초가 지난 후에 (X, Y)에 존재하는 바이러스의 종류를 출력하는 프로그램을 작성하세요. 만약 S초가 지난 후에 해당 위치에 바이러스가 존재하지 않는다면, 0을 출력합니다...

[DFS/BFS] 이코테 (파이썬) 특정 거리의 도시 찾기 풀이

[문제] 어떤 나라에는 1 ~ N번까지의 도시와 M개의 단방향 도로가 존재합니다. 모든 도로의 거리는 1입니다. 이때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시의 번호를 출력하는 프로그램을 작성하세요. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정합니다. 예를 들어 N = 4, K = 2, X = 1일 때 다음과 같이 그래프가 구성되어 있다고 합시다. 이때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시뿐입니다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않습니다. [입력 조건] 1. 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시..

[DFS/BFS] 이코테 (파이썬) 미로 탈출 풀이

[문제] 동빈이는 N * M 크기의 직사각형 형태의 미로에 갇혔습니다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 합니다. 동빈이의 위치는 (1, 1)이며 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있습니다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있습니다. 미로는 반드시 탈출할 수 있는 형태로 제시됩니다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하세요. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 모함해서 계산합니다. [입력 조건] 1. 첫째 줄에 두 정수 N, M(4

[DFS/BFS] 이코테 (파이썬) 음료수 얼려 먹기 풀이

[문제] N * M 크기의 얼음 틀이 있습니다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시됩니다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주합니다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하세요. [입력 조건] 1. 첫 번째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어집니다. (1

너비 우선 탐색(BFS; Breadth-first Search)

너비 우선 탐색은 특정한 데이터를 탐색할 때 너비를 우선으로 하여 탐색을 수행하는 탐색 알고리즘이다. 즉, 어떠한 시작점이 있을 때 그 시작점과 가까운 것을 우선으로 탐색을 한다. 너비 우선 탐색은 큐를 이용하는데, 큐는 먼저 들어온 데이터가 먼저 나간다는 점에서 너비 우선 탐색이 가능하도록 해준다. 그림과 같이 큐에서 하나의 노드를 꺼내고 해당 노드와 인접한 노드 중 방문하지 않은 노드를 방문한다. 그 후 순서대로 큐에 값을 삽입하는 과정을 반복한다. 그림에 대해 구체적으로 설명하자면, (1) 먼저 큐에서 1을 꺼낸다. (2) 1과 인접한 노드 중 방문하지 않은 2와 3을 방문처리한다. (3) 2를 꺼내고 2와 인접한 노드 중 3은 이미 방문했기 때문에 넘어가고 방문하지 않은 4와 5를 방문처리한다. ..