본문 바로가기
728x90

BFS9

[SWEA/Python] 5250. 최소 비용 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 bfs를 활용해서 인접한 지역으로 이동한다. 이동한 지역이 이동 전 지역보다 높을 경우, 차이를 저장해준다. 이동할 지역에 이미 저장된 비용보다 현재의 경로로 이동할 때의 비용이 더 덜든 다면, 비용을 갱신해준다. (이 조건이 있기 때문에 따로 방문체크를 안해줘도 된다! 방문체크를 하면 오히려 최소 거리로만 이동하게 된다.) 📌 코드 from collections import deque import sys sys.stdin = open('input.txt') de.. 2021. 10. 15.
[SWEA/Python] 5247. 연산 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 bfs를 활용해서 각 계산값에 접근하는 방식으로 풀었다. 최대 재귀 깊이를 넘어가길래 가지치기를 해줬는데, 첫 번째 코드처럼 append하고 not in으로 탐색하는 방식은 시간초과가 났다. 그래서 두 번째 코드처럼 처음부터 모든 숫자만큼 리스트를 만들어주고 숫자가 중복되지 않도록 이미 나온 숫자는 1로 바꿔줬다. 📌 코드 from collections import deque def find_M(N): queue = deque() queue.append((N, 0.. 2021. 10. 14.
[BOJ/Python] 17471. 게리맨더링 📌 문제 https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net 📌 문제 접근 방법 N개의 구역을 조합을 이용해서 2개의 선거구로 나눈다. 각 선거구를 bfs를 통해 탐색해서 모든 구역에 방문할 수 있는지 체크한다. 여기서, 선거구에 있는 구역만 탐색을 하는 것이 포인트! (w in group → 이걸 처리 안해줘서 실패가 나왔음!) 2개의 선거구 모두 선거구 안의 모든 구역에 방문할 수 있다면, 인구 수의 차이를 구하고 최소값으로 갱신한다. 📌 코드 # 백준 17471 .. 2021. 10. 13.
[BOJ/Python] 1600. 말이 되고픈 원숭이 📌 문제 https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 📌 문제 접근 방법 말처럼 움직일 경우와 보통으로 움직일 경우의 델타 배열을 따로 정의 visited를 3차원으로 만들어서 말처럼 움직인 횟수를 인덱스로 각각 다른 리스트에 방문 체크 📌 코드 from collections import deque def bfs(i, j): queue = deque() queue.append((i, j, 0)) visited = [[[0 f.. 2021. 10. 4.
728x90