SWEA

    [python] SWEA - 1258. [S/W 문제해결 응용] 7일차 - 행렬찾기

    [python] SWEA - 1258. [S/W 문제해결 응용] 7일차 - 행렬찾기

    🤔문제 해결 1. 💨 💻소스 코드 from itertools import chain # 답을 출력하기 위한 라이브러리 chain # 이중 리스트를 단일리스트로 바꿔준다. def findSqure(sx, sy): i, j = sx, sy # 아래로 쭉 내려가서 찾고 while i < n and maps[i][j]: i += 1 else: i -= 1 # 오른쪽으로 가서 찾고 while j < n and maps[i][j]: j += 1 else: j -= 1 # 행렬의 끝값을 찾았으면 그 행렬의 값을 전부 0으로 만들어준다. changeZero(sx, i+1, sy, j+1) result.append([i-sx+1,j-sy+1]) def changeZero(a,b,c,d): # 행 a - b, 열 c - ..

    [python] SWEA - 1251. [S/W 문제해결 응용] 4일차 - 하나로

    [python] SWEA - 1251. [S/W 문제해결 응용] 4일차 - 하나로

    🤔문제 해결 1. D4 | MST - prim 2. 간선의 가중치를 값으로 하는 인접 행렬을 만든다 3. 최소 값을 갱신해줄 가중치 리스트, MST에 포함되지 체크하는 리스트, 부모노드 선택리스트를 만든다. (여기서는 모든 노드가 연결될 수 있기 때문에 부모노드는 필요하지 않을 수 있음) 4. 시작점을 선택(여기서는 0)하고 간선을 돌며 탐색한다 (1) 아직 MST에 포함되어 있지 않고, 가중치가 최소인 정점 u를 찾는다. (2) u를 MST에 포함시키고, 그 가중치를 결과값에 더해준다. (3) 가중치를 최솟값으로 갱신하기 위해 u에 인접하고 아직 mst가 아닌 정점(w) 중에서 key[w] > u-w 이면 갱신한다 5. 모든 노드를 선택할 때까지 4번을 반복한다. 💨 최소신장트리 알고리즘, 크루스칼과 ..

    [python] SWEA - 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기

    [python] SWEA - 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기

    🤔문제 해결 1. D4 | 스택? 2. 괄호를 처음부터 하나씩 검사한다. 3. 왼쪽 괄호일 경우 스택에 넣는다. 4. 오른쪽 괄호일 경우 스택의 마지막에 있는 괄호와 비교하여 짝이 맞는지 검사한다. 5. 짝이 맞으면 통과 6. 아니라면 이 괄호들은 맞지 않는 괄호이다. 종료 💨 가볍게 스택을 연습하는 문제 💻소스 코드 def isRight(parenthesis): stack = [] for paren in parenthesis: # 왼쪽 괄호 if paren in parenthesis_list[0]: stack.append(paren) # 오른쪽 괄호 else: if stack: k = stack[-1] for i in range(4): # 괄호 네가지중 짝이 맞다면 통과 if k == parenthes..

    [python] SWEA - 1226. [S/W 문제해결 기본] 7일차 - 미로1

    [python] SWEA - 1226. [S/W 문제해결 기본] 7일차 - 미로1

    🤔문제 해결 1. D4 | DFS 2. 시작점을 찾는다. 3. 스택을 활용하고 상하좌우 4방향 탐색(인덱스 범위 이내)을 한다. (1) 길('0')을 만날 경우 스택에 추가하고, 나중에 다시 탐색하는 것을 방지하기 위해 그 지점의 값을 바꿔준다. (2) 끝('3')을 만날 경우 미로가 가능하다는 의미 이므로 답을 1로 하고 탐색을 종료한다. 💨 DFS 기본문제이다. 💻소스 코드 dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] for _ in range(10): answer = 0 n = int(input()) maps = [list(input()) for _ in range(16)] # 출발점 찾기 x, y = 0, 0 for i in range(16): for j in range(1..

    [python] SWEA - 1249. [S/W 문제해결 응용] 4일차 - 보급로

    [python] SWEA - 1249. [S/W 문제해결 응용] 4일차 - 보급로

    문제 해결 1. D4 | BFS 2. 각 지점에서 걸리는 시간 리스트(인풋 값)와, 각 지점까지 가는데 걸리는 누적 시간 리스트를 가지고 시작한다. 3. 전에 방문 여부와 상관없이 각 지점에서 상하좌우 4방향을 탐색하며, 현재까지 걸린 시간과 다음칸에서 소모할 시간을 더한 값이 다음 칸까지 걸리는 시간보다 작으면 그 칸으로 이동한다. 4. 모든 가능성을 다 탐색하고 리스트의 마지막지점을 출력한다. 🐱‍💻 원래는 다익스트라 알고리즘으로 힙큐를 사용해서 풀려고 했는데 생각이 안나서 BFS 랑 최솟값 리스트를 활용해서 풀었다. 소스 코드 from _collections import deque for tc in range(1, 1 + int(input())): n = int(input()) maps = [lis..

    [python] SWEA - 2819. 격자판의 숫자 이어 붙이기

    [python] SWEA - 2819. 격자판의 숫자 이어 붙이기

    문제 해결 1. D4 | 재귀를 이용한 DFS 2. 시작점을 하나 선택하고 dfs함수 실행 3. 선택한점에서 4방향 탐색(인덱스 범위 이내) 후 해당 지점의 숫자를 더해가며 dfs재귀함수실행 4. 숫자의 길이가 7이 되면 함수를 종료하고, 결과 리스트에 넣어준다.(여기서는 중복을 피하기위해 set을 사용) 5. 모든 경우의 수를 탐색 후 답을 출력 💨 D4라고 하기엔 조금 쉬운 문제였다. 소스 코드 def dfs(number, x, y): # 길이가 7이 되면 result에 값을 추가하고 break if len(number) == 7: result.add(number) return # 상하좌우 4방향을 탐색 for k in range(4): nx = x + dx[k] ny = y + dy[k] # 리스트..