DFS 8

백준(Python) 14500번 테트로미노 풀이

Python으로 구현한 14500번 테트로미노 문제 풀이입니다. https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net # Case 1 n, m = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(n)] max_value = 0 # 테트로미노 좌표 정보 (기준점은 가장 왼쪽 + 위쪽에 위치한 정사각형) case = [ # case 1 (ㅡ, ㅣ) [[0,..

백준(Python) 19236번 청소년 상어 풀이

Python으로 구현한 19236번 청소년 상어 문제 풀이입니다. https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net import copy # 4 x 4 크기의 정사각형에 존재하는 각 물고기의 번호(없으면 -1)와 방향 값을 담는 테이블 array = [[None] * 4 for _ in range(4)] for i in range(4) : data = list(map(int, input().split())) # 매 줄마다 4마리..

이코테 (파이썬) 청소년 상어 풀이

[문제] https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net [풀이] import copy # 4 x 4 크기의 정사각형에 존재하는 각 물고기의 번호(없으면 -1)와 방향 값을 담는 테이블 array = [[None] * 4 for _ in range(4)] for i in range(4) : data = list(map(int, input().split())) # 매 줄마다 4마리의 물고기를 하나씩 확인하며 for j in ra..

[DFS/BFS] 이코테 (파이썬) 연산자 끼워 넣기 풀이

[문제] N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어집니다. 또, 수와 수 사이에 끼워 넣을 수 있는 N-1개의 연산자가 주어집니다. 연산자는 덧셈 (+), 뺄셈 (-), 곱셈 (*), 나눗셈 (/) 으로만 이루어져 있습니다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있는데 이때 주어진 수의 순서를 바꾸면 안됩니다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(*), 나눗셈(/) 1개인 경우에는 총 60가지의 식을 만들 수 있습니다. . . . N개의 수와 N-1개의 연산자가 주어졌을 때, 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하세요...

[DFS/BFS] 이코테 (파이썬) 연구소 풀이

[문제] 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었습니다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 합니다. 연구소는 크기가 N x M인 직사각형으로 나타낼 수 있으며, 직사각형은 1 x 1 크기의 정사각형으로 나누어져 있습니다. 연구소는 빈칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지합니다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈칸으로 모두 퍼져나갈 수 있습니다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 합니다. . . . 벽을 3개 세운 뒤, 바이러스가 퍼질 수 없는 곳을 안전 영역이라고 할 때 위의 지도에서 안전 영역의 크기는 27입니다. 연구소의 지도가 주어졌을 때..

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

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

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

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

깊이 우선 탐색(DFS; Depth-first Search)

깊이 우선 탐색은 특정한 데이터를 탐색할 때 깊이를 우선으로 하여 탐색을 수행하는 탐색 알고리즘이다. 즉, 깊이 우선 탐색은 데이터를 보다 깊은 것을 우선으로 하여 탐색한다. 깊이 우선 탐색은 스택을 이용하는데, 컴퓨터는 구조적으로 항상 스택의 원리를 사용하기 때문에 스택을 사용하지 않고 단순히 재귀함수만을 사용해서도 구현이 가능하다. 그림과 같이 스택의 최상단 노드를 확인하고 해당 노드와 인접한 노드 중 방문하지 않은 노드를 스택에 넣고 방문처리한다. 그림에 대해 구체적으로 설명하자면, (1) 먼저 스택에 시작 노드인 1을 삽입하고 방문처리한다. (2) 1과 인접한 노드 중 방문하지 않은 2를 스택에 삽입하고 방문처리한다. (3) 2와 인접한 노드 중 방문하지 않은 3을 스택에 삽입하고 방문처리한다. ..