본문 바로가기

dfs6

[프로그래머스] Lv2 - 빛의 경로 사이클 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/86052 코딩테스트 연습 - 빛의 경로 사이클 각 칸마다 S, L, 또는 R가 써져 있는 격자가 있습니다. 당신은 이 격자에서 빛을 쏘고자 합니다. 이 격자의 각 칸에는 다음과 같은 특이한 성질이 있습니다. 빛이 "S"가 써진 칸에 도달한 경우, 직진 programmers.co.kr dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] def solution(grid): global answer, visited global N, M answer = [] N = len(grid) M = len(grid[0]) visited = [[[False]*4 for _ in range(M)] for _ in r.. 2022. 4. 3.
[프로그래머스] 고득점Kit (8) - DFS/BFS (파이썬) 1. 타겟 넘버 (Lv. 2) # 타겟 넘버 def solution(numbers, target): answer = 0 def dfs(target, k, result): nonlocal answer if k == len(numbers): if target == result: answer += 1 return else: dfs(target, k+1, result+numbers[k]) dfs(target, k+1, result-numbers[k]) dfs(target, 0, 0) return answer 재귀 함수를 이용한 dfs로 풀었다. k == len(numbers) 일 경우, target과 같은지 확인 return answer 2. 네트워크 (Lv. 3) # 네트워크 from collections i.. 2022. 3. 11.
[백준] 17472번 - 다리 만들기 2 (파이썬) # 다리 만들기 2 from collections import deque import sys input = sys.stdin.readline MAX = sys.maxsize dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] N, M = map(int, input().split()) land = [] arr = [] for i in range(N): arr.append(list(map(int, input().split()))) for j in range(M): if arr[i][j] == 1: land.append((i, j)) def find_land(visited, a, b, num): q = deque() q.append((a, b)) while q: x, y = q.popleft(.. 2022. 2. 19.
[백준] 3109번 - 빵집 (파이썬) # 빵집 import sys input = sys.stdin.readline N, M = map(int, input().split()) arr = [] for _ in range(N): arr.append(list(input().strip())) dx = [-1, 0, 1] dy = [1, 1, 1] def pipe(x, y): global result arr[x][y] = 'o' if y == M-1: result += 1 return True for k in range(3): nx = x + dx[k] ny = y + dy[k] if 0 2022. 2. 18.
[백준] 11437번 - LCA (파이썬) # LCA import sys input = sys.stdin.readline sys.setrecursionlimit(10**5) def make_depth(node, dep): visited[node] = True depth[node] = dep for nnode in arr[node]: if not visited[nnode]: parent[nnode] = node make_depth(nnode, dep+1) def lca(x, y): if depth[x] > depth[y]: y, x = x, y while True: if depth[x] == depth[y]: break y = parent[y] for _ in range(depth[x]): if x == y: return x x = parent[x.. 2022. 2. 7.
[백준] 9466번 - 텀 프로젝트 (파이썬) # 텀 프로젝트 import sys input = sys.stdin.readline sys.setrecursionlimit(100001) def dfs(x): global result visited[x] = True cycle.append(x) if visited[student[x]]: if student[x] in cycle: result += cycle[cycle.index(student[x]):] return else: dfs(student[x]) T = int(input()) for _ in range(T): N = int(input()) student = list(map(int, input().split())) student.insert(0, 0) visited = [False] * (N+1) .. 2022. 1. 31.