practivceAlgorithm/swexpertacademy 84

[SWEA][Python] 10966 물놀이를 가자

최대 정사각형 만들기 or 직사각형 만들기와 동일한 로직. W가 나오면 초기화, 나오지 않으면 최소거리 갱신하며 dp 양방향으로 한번씩 하고 그 중 최솟값으로 갱신. import sys sys.stdin = open('input.txt') for test in range(1, int(input()) + 1): N, M = map(int, input().split()) pool = [list(input()) for _ in range(N)] dp = [[float('inf')] * M for _ in range(N)] answer = 0 for i in range(N): for j in range(M): if pool[i][j] == 'W': dp[i][j] = 0 continue if j: dp[i][j..

[SWEA][Python] 1953 탈주범 검거

bfs로 갈수 있는 영역 전부 순회. 현재 터널의 타입과 다음 갈 칸의 타입을 비교해 연결되어 있을 때만 이동하도록 설계 import sys sys.stdin = open('input.txt') from collections import deque def bfs(x, y, cur_type, time): q = deque() q.append((x, y, cur_type, time)) visited[x][y] = True answer = 1 while q: x, y, cur_type, time = q.popleft() for direction in tunnels[cur_type]: nx, ny = x + dx[direction], y + dy[direction] if 0

[SWEA][Python] 1949 등산로 조성

1. 가장 높은 봉우리에서 탐색 2. k만큼 땅을 팠다가 복구 def dfs(x, y, cnt): global answer answer = max(answer, cnt) for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 = k: mountain[i][j] -= k new_start(candidates) mountain[i][j] += k for test in range(1, int(input()) + 1): N, K = map(int, input().split()) mountain = [list(map(int, input().split())) for _ in range(N)] visited = [[False] * N for _ in range(N)] answ..

[SWEA][Python] 1232 사칙연산

중위순횐줄 알았는데 제대로보니 중위는 아니고. 그냥 말단부터 올라오는 분할정복. import sys sys.stdin = open('input.txt') def inorder_tree(cur_node): if not tree[cur_node]: return int(values[cur_node]) left = inorder_tree(tree[cur_node][0]) right = inorder_tree(tree[cur_node][1]) if values[cur_node] == '-': return left - right elif values[cur_node] == '+': return left + right elif values[cur_node] == '*': return left * right else:..

[SWEA][Python] 1231 중위순회

이진탐색트리의 중위 순회 import sys sys.stdin = open('input.txt') def inorder_tree(cur_node): if not tree[cur_node]: return values[cur_node] elif len(tree[cur_node]) == 1: return inorder_tree(tree[cur_node][0]) + values[cur_node] return inorder_tree(tree[cur_node][0]) + values[cur_node] + inorder_tree(tree[cur_node][1]) for test in range(1, 11): N = int(input()) tree = {i: [] for i in range(1, N+1)} values..

[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}')

[SWEA][Python] 1220 magnetic

문제 보자마자 무지성 구현. 한칸씩 이동 이동 멈추면 반복문 종료. 다른 사람들은 0 빼고 1,2만 새 배열에 담아서 switch바꾸는 형식으로 풀었더라. 상태1에서 2를 만나면 1더하는 식으로. import sys sys.stdin = open('input.txt') def move_block(): check = 0 new_struck = 0 for i in range(N): for j in range(N): if not i == 99 and matrix[i][j] == 1: if not matrix[i+1][j]: matrix[i][j], matrix[i+1][j] = matrix[i+1][j], matrix[i][j] check = 1 elif matrix[i+1][j] == 1: matrix[i]..