practivceAlgorithm 570

[백준][Python] 17484 진우의 달 여행

dp 누적으로 최소값 구해줬습니다. import sys input = sys.stdin.readline N, M = map(int, input().split()) matrix = [list(map(int, input().split())) for _ in range(N)] dp = [[[0,0,0] for _ in range(M)]] + [[[float('inf'),float('inf'),float('inf')] for _ in range(M)] for _ in range(N)] for i in range(1,N+1): for j in range(M): if j < M-1: dp[i][j][0] = min(dp[i-1][j+1][1],dp[i-1][j+1][2]) + matrix[i-1][j] if 0 <..

[백준][Python] 16938 캠프준비

평범한 조합문제입니다. 대신 조건에 만족하는 조합에서 return을 주면 그 후에 다른 수를 취하더라도 조건에 맞을 수 있는 경우가 걸러지기 때문에 return을 하면 안됩니다. import sys input = sys.stdin.readline def dfs(idx, s, min_n, max_n): global cnt if L R: return for next_idx in range(idx+1,N): dfs(next_idx, s+arr[next_idx], min(min_n, arr[next_idx]), max(max_n, arr[next_idx])) N, L, R, X = map(int, input().split()) arr = list(map(int, input().split())) cnt = 0 d..

[백준][Python] 1918 후위표기식

후위표기식은 늘 stack을 사용하여 풀이한다. a = input() stack = [] #스택 res='' #출력 for x in a: if x.isalpha(): #피연산자인지 아닌지 확인 res+=x else: if x == '(': stack.append(x) elif x == '*' or x =='/': while stack and (stack[-1]=='*' or stack[-1]=='/'): res+=stack.pop() stack.append(x) elif x == '+' or x == '-': while stack and stack[-1] != '(': res += stack.pop() stack.append(x) elif x == ')': while stack and stack[-1] ..

[SWEA][Python] 5186 이진수2

정수를 이진수로 변환할때와 동일하게 재귀구조로 조건에 따라 1과 0을 더하며 파고드는 구조. def binary(n,depth): if depth>13: return '2' if not n: return '' if n >= 2**(-depth): n -= 2**(-depth) return '1' + binary(n,depth+1) return '0' + binary(n,depth+1) for test in range(1,int(input())+1): N = float(input()) ans = binary(N,1) if ans[-1]=='2': ans = 'overflow' print(f'#{test} {ans}')

[백준][Python] 15683 감시

1. dfs를 통해 각 cctv의 방향에 따른 조합을 구합니다. 2. 조합으로 만들어진 cctv_set을 통해 색칠하는 식으로 감시영역을 구합니다. import sys input = sys.stdin.readline def check_zero_area(cctvs): tmp = [[1]*M for _ in range(N)] q = [] for cctv in cctvs: init_x, init_y, cctv_id, cctv_dir = cctv tmp[init_x][init_y] = 0 dirs = cctv_setting[cctv_id][cctv_dir] for d in dirs: q.append((init_x, init_y)) while q: x, y = q.pop() nx = x + delta[d][0] ..

[백준][Python] 1937 욕심쟁이 판다

결국 조사한 지점은 다시 조사하지 않아도 된다는 점. 누적되는 것은 좀 더 긴 값으로 갱신하면 된다는 점. 결국 '최장거리' 경로를 구하는 문제이고 이는 다익스트라의 dists 배열처럼 더 크거나 더 작은 값으로 갱신되는 구조를 띈다. import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) def dfs(x, y): # 이미 다른 조사에서 완료된 지점이면 패스 if dp_dist[x][y]: return dp_dist[x][y] # 조사 안됐으면 1부터 시작. dp_dist[x][y] = 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0