diff --git "a/Programmers/DFS_BFS/\352\262\214\354\236\204\353\247\265\354\265\234\353\213\250\352\261\260\353\246\254_\353\205\270\354\234\240\353\257\274.py" "b/Programmers/DFS_BFS/\352\262\214\354\236\204\353\247\265\354\265\234\353\213\250\352\261\260\353\246\254_\353\205\270\354\234\240\353\257\274.py" new file mode 100644 index 00000000..dc4a5dfa --- /dev/null +++ "b/Programmers/DFS_BFS/\352\262\214\354\236\204\353\247\265\354\265\234\353\213\250\352\261\260\353\246\254_\353\205\270\354\234\240\353\257\274.py" @@ -0,0 +1,33 @@ +from collections import deque + +dx = [0, 0, -1, 1] +dy = [-1, 1, 0, 0] + + +def BFS(x, y, visited, maps, n, m): + visited[x][y] = True + q = deque() + q.append((x, y)) + + while q: + x, y = q.popleft() + for i in range(4): + nx = x + dx[i] + ny = y + dy[i] + if nx < 0 or nx >= n or ny < 0 or ny >= m: + continue + if maps[nx][ny] != 0 and not visited[nx][ny]: + visited[nx][ny] = True + q.append((nx, ny)) + maps[nx][ny] = maps[x][y] + 1 + return maps[-1][-1] if maps[-1][-1] > 1 else -1 + + +def solution(maps): + answer = 0 + n = len(maps) + m = len(maps[0]) + visited = [[False] * m for _ in range(n)] + answer = BFS(0, 0, visited, maps, n, m) + + return answer diff --git "a/Programmers/DFS_BFS/\353\204\244\355\212\270\354\233\214\355\201\254_\353\205\270\354\234\240\353\257\274.py" "b/Programmers/DFS_BFS/\353\204\244\355\212\270\354\233\214\355\201\254_\353\205\270\354\234\240\353\257\274.py" new file mode 100644 index 00000000..f6ca9054 --- /dev/null +++ "b/Programmers/DFS_BFS/\353\204\244\355\212\270\354\233\214\355\201\254_\353\205\270\354\234\240\353\257\274.py" @@ -0,0 +1,16 @@ +def solution(n, computers): + answer = 0 + visited = [False for i in range(n)] + for i in range(n): + if visited[i] == False: + DFS(n, computers, i, visited) + answer += 1 + return answer + + +def DFS(n, computers, i, visited): + visited[i] = True + for j in range(n): + if j != i and computers[i][j] == 1: + if visited[j] == False: + DFS(n, computers, j, visited) diff --git "a/Programmers/DFS_BFS/\353\213\250\354\226\264\353\263\200\355\231\230_\353\205\270\354\234\240\353\257\274.py" "b/Programmers/DFS_BFS/\353\213\250\354\226\264\353\263\200\355\231\230_\353\205\270\354\234\240\353\257\274.py" new file mode 100644 index 00000000..b9272f53 --- /dev/null +++ "b/Programmers/DFS_BFS/\353\213\250\354\226\264\353\263\200\355\231\230_\353\205\270\354\234\240\353\257\274.py" @@ -0,0 +1,28 @@ +from collections import deque + + +def solution(begin, target, words): + answer = 0 + visited = [False for _ in range(len(words))] + q = deque() + q.append((begin, 0)) + + while q: + word, count = q.popleft() + if word == target: + answer = count + return answer + else: + for i in range(len(words)): + tempCount = 0 + if visited[i] != True: + for j in range(len(word)): + if word[j] != words[i][j]: + tempCount += 1 + + if tempCount == 1: + count += 1 + q.append((words[i], count)) + visited[i] = True + + return answer diff --git "a/Programmers/DFS_BFS/\354\227\254\355\226\211\352\262\275\353\241\234_\353\205\270\354\234\240\353\257\274.py" "b/Programmers/DFS_BFS/\354\227\254\355\226\211\352\262\275\353\241\234_\353\205\270\354\234\240\353\257\274.py" new file mode 100644 index 00000000..9b3a9395 --- /dev/null +++ "b/Programmers/DFS_BFS/\354\227\254\355\226\211\352\262\275\353\241\234_\353\205\270\354\234\240\353\257\274.py" @@ -0,0 +1,50 @@ +from collections import deque +# 테케 1,2번 실패 +# def solution(tickets): +# answer = [] +# q=deque() +# tickets.sort(key=lambda x:x[1]) +# visited=[False for _ in range(len(tickets))] +# for i in range(len(tickets)): +# if tickets[i][0]=='ICN': +# q.append((tickets[i][0],tickets[i][1])) +# visited[i]=True +# break + +# while q: +# start,end =q.popleft() +# answer.append(start) +# for i in range(len(tickets)): +# if tickets[i][0]==end and visited[i]==False: +# q.append((tickets[i][0],tickets[i][1])) +# visited[i]=True +# break + +# answer.append(end) +# return answer + + +def solution(tickets): + answer = [] + graph = {} + + for start, end in tickets: + if start in graph: + graph[start].append(end) + else: + graph[start] = [end] + + for key in graph.keys(): + graph[key].sort(reverse=True) + + q = deque(["ICN"]) + + while q: + current = q[-1] + if current in graph and graph[current]: + q.append(graph[current].pop()) + else: + # popleft해서 그냥 담는게 안되는 예시 [["ICN","A"],["ICN","B"],["B","ICN"]] + answer.append(q.pop()) + answer.reverse() + return answer diff --git "a/Programmers/DFS_BFS/\355\203\200\352\262\237\353\204\230\353\262\204_\353\205\270\354\234\240\353\257\274.py" "b/Programmers/DFS_BFS/\355\203\200\352\262\237\353\204\230\353\262\204_\353\205\270\354\234\240\353\257\274.py" new file mode 100644 index 00000000..20f4a4a8 --- /dev/null +++ "b/Programmers/DFS_BFS/\355\203\200\352\262\237\353\204\230\353\262\204_\353\205\270\354\234\240\353\257\274.py" @@ -0,0 +1,15 @@ +def solution(numbers, target): + n = len(numbers) + answer = 0 + + def dfs(idx, result): + if idx == n: + if result == target: + nonlocal answer + answer += 1 + return + else: + dfs(idx+1, result+numbers[idx]) # 그 다음값을 더하고 빼고 + dfs(idx+1, result-numbers[idx]) + dfs(0, 0) + return answer