BFS
-
[프로그래머스 43165] 타겟 넘버Coding Test/프로그래머스 2021. 4. 15. 13:54
# 문제 내 풀이 from collections import deque def solution(numbers, target): answer = 0 # 큐 생성 및 초기화 queue = deque([numbers[0], -numbers[0]]) idx = 1 # BFS 수행 # numbers의 마지막 숫자를 더하고 뺄 때까지 while idx < len(numbers): for _ in range(len(queue)): num = queue.popleft() # 해당 순서의 숫자를 더한 값과 뺀 값을 큐에 삽입 queue.append(num + numbers[idx]) queue.append(num - numbers[idx]) idx += 1 # 큐가 빌 때까지 while queue: if queue.po..
-
[프로그래머스 43163번] 단어 변환Coding Test/프로그래머스 2021. 4. 15. 13:45
# 문제 내 풀이 from collections import deque # 두 단어가 한 글자가 다른 관계인지 체크하는 함수 정의 def one_diff(word, cmp_word): cnt = 0 for i in range(len(word)): if word[i] != cmp_word[i]: cnt += 1 if cnt > 1: break if cnt == 1: return True return False def solution(begin, target, words): answer = 0 n = len(words) visited = [[False] * n for _ in range(n)] # 2차원 방문 정보 테이블 # 큐 생성 및 초기화 # begin과 철자가 하나만 다른 단어를 찾아, 방문 처리하고..
-
[백준 7562번] 나이트의 이동Coding Test/백준 2021. 1. 10. 22:42
# 문제 내 풀이 from collections import deque # BFS 함수 정의 def bfs(sx, sy, ex, ey): # 시작 지점이 목표 지점과 같은 경우, 함수 종료 if sx == ex and sy == ey: return queue = deque([(sx, sy)]) # 나이트가 움직일 수 있는 방향 벡터 정의 dx = [-2, -1, 1, 2, 2, 1, -1, -2] dy = [1, 2, 2, 1, -1, -2, -2, -1] while queue: x, y = queue.popleft() for d in range(8): nx = x + dx[d] ny = y + dy[d] # 범위를 벗어나는 경우, 무시 if nx = i or ny < 0 or ny ..
-
[백준 7569번] 토마토 - 3차원Coding Test/백준 2021. 1. 10. 01:18
# 문제 내 풀이 from collections import deque m, n, h = map(int, input().split()) # 토마토 상자를 3차원 리스트로 입력받음 box = [] for _ in range(h): box.append([list(map(int, input().split())) for _ in range(n)]) ripe = deque() # 익은 토마토를 넣을 큐 생성 # BFS 함수 정의 def bfs(): days = -1 # 위, 아래, 상, 하, 좌, 우 방향 벡터 정의 dx = [-1, 1, 0, 0, 0, 0] dy = [0, 0, -1, 1, 0, 0] dz = [0, 0, 0, 0, -1, 1] # 토마토 익히기 수행 while ripe: days += 1 f..
-
[이코테 DFS & BFS] 미로 탈출Coding Test/이것이 코딩 테스트다 2021. 1. 10. 00:34
# 문제 동빈이는 N × M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이며 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다 내 풀이 - 문제 풀이 실패, 모범 답안 from collections import deque n, m = map(int, input().split()) graph = [list(map(int, input())) ..
-
[백준 1697번] 숨바꼭질Coding Test/백준 2021. 1. 8. 17:37
# 문제 내 풀이 from collections import deque n, k = map(int, input().split()) table = [0] * 100001 # 위치를 이동할 수직선 생성 # BFS 함수 정의 def bfs(x): queue = deque([x]) # 큐 생성 # 걷기와 순간이동을 수행할 방향 벡터 생성 dx = [1, 1, 2] op = ['-', '+', '*'] while queue: p = queue.popleft() # 걷거나 순간이동하는 경우의 수 고려 for i in range(3): np = eval(str(p) + op[i] + str(dx[i])) # 범위를 벗어나면 무시 if np 100000 or np == x: continue # 아..
-
[백준 7576번] 토마토Coding Test/백준 2021. 1. 6. 09:37
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 from collections import deque def bfs(): # 동서남북 방향벡터 설정 dx = [1, 0, -1, 0] dy = [0, -1, 0, 1] days = -1 # while의 종료 조건으로 1씩 밀리기 때문에 0이 아닌 -1로 설정 while ripe: days += 1 # 현재 큐에 담긴 익은 토마토의 수만큼 for _ in range(len(ripe)): x, y = ripe.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx = n or ny = m: continue # 익은 토마토 주변에 익지 않은 토마토가 있는 경우 ..
-
[백준 1012번] 유기농 배추Coding Test/백준 2021. 1. 4. 21:51
# 문제 내 풀이 - DFS와 BFS로 모두 구현해 봄 from collections import deque # bfs를 위한 큐 생성 라이브러리 import sys sys.setrecursionlimit(10000) # 파이썬 재귀 한도를 10000으로 늘림 (기존 재귀 한도: 1000) # dfs 정의 def dfs(x, y): graph[x][y] = -1 dx = [0, -1, 0, 1] dy = [1, 0, -1, 0] for i in range(4): next_x = x + dx[i] next_y = y + dy[i] if next_x = n or next_y = m: continue if graph[next_x][next_y] == 1: ..