2022(112)
-
12100 - 2048(Easy)*
from copy import deepcopy def maxNum(board): maxResult = 0 for i in range(N): maxResult = max(maxResult, max(board[i])) return maxResult def move2048(direction, board): #왼쪽 if direction == 0: for i in range(N): pointer = 0 for j in range(1, N): #왼쪽 if board[i][j] != 0: board[i][j] = 0 # [i, j] 앞이 0이라면 앞으로 당겨짐 if board[i][pointer] == 0: board[i][pointer] = tmp # [i, pointer] == [i, j] 이라면 더해서 앞으로..
2022.05.03 -
DFS - 연결 요소의 개수[11724번]
def dfs(idx): if idx in visited: return visited.append(idx) for nextIdx in range(1, len(graph[idx])): if(graph[idx][nextIdx] == 1) and (nextIdx not in visited): dfs(nextIdx) import sys sys.setrecursionlimit(10000) input = sys.stdin.readline N, M = map(int, input().split()) graph = [[0]*(N+1) for _ in range(N+1)] for _ in range(M): a, b = map(int, input().split()) graph[a][b] = 1 graph[b][a] = 1 ..
2022.04.18 -
DFS - DFS와BFS[1260번]
def DFS(loc): visited.append(loc) for idx in range(1, len(graph[loc])): if len(visited) == n: return elif graph[loc][idx] == 1 and idx not in visited: loc = idx DFS(loc) def BFS(loc): queue = [loc] visited2.append(loc) while queue: curCheck = queue.pop(0) for idx in range(1, len(graph[curCheck])): if len(visited2) == n: return elif graph[curCheck][idx] == 1 and (idx not in visited2) and (idx not..
2022.04.17 -
DFS - 바이러스[2606번]
def dfs(i): for idx in range(1, len(graph[i])): if graph[i][idx] == 1 and idx not in visited: visited.append(idx) dfs(idx) n = int(input()) m = int(input()) graph = [[0]*(n+1) for _ in range(n+1)] for _ in range(m): a, b = map(int, input().split()) graph[a][b] = 1 graph[b][a] = 1 visited = [1] dfs(1) print(len(visited)-1) 해당 문제는 DFS 문제로 회귀함수를 이용해 1번을 시작으로 연결된 컴퓨터들을 visited로 기록함으로써 구할 수 있다. -> 1번..
2022.04.09 -
14888번 - 연산자 끼워넣기*
DFS 예시 graph = dict() graph['A'] = ['B', 'C'] graph['B'] = ['A', 'D'] graph['C'] = ['A', 'G', 'H', 'I'] graph['D'] = ['B', 'E', 'F'] graph['E'] = ['D'] graph['F'] = ['D'] graph['G'] = ['C'] graph['H'] = ['C'] graph['I'] = ['C', 'J'] graph['J'] = ['I'] {'A': ['B', 'C'], 'B': ['A', 'D'], 'C': ['A', 'G', 'H', 'I'], 'D': ['B', 'E', 'F'], 'E': ['D'], 'F': ['D'], 'G': ['C'], 'H': ['C'], 'I': ['C', 'J'..
2022.04.08 -
Dynamic Programming(DP) - 정수 삼각형[1932]
Idea 제일 위에서 부터 아래로 범위를 넓히면서 모든 경우의 덧셈을 더하고 최종 말단에 왔을때 최댓값을 구하면 된다. 이때, 인덱스 1부터 idx-1 까지는 더할 수 있는 수의 후보가 이전의 idx번째 수와 idx-1번째 수 총 2개가 있다. 따라서 최댓값을 구하는 문제이므로 큰 값만 뽑아서 현재 idx번째 수에 더해주면 된다. N = int(input()) fibo = [] for i in range(N): nList = list(map(int, input().split())) fibo.append(nList) for fidx in range(1, N): for idx in range(len(fibo[fidx])): if idx == 0: fibo[fidx][idx] += fibo[fidx-1][0]..
2022.04.07