BFS(3)
-
[백준] 2240 자두나무 (골드 5)
queue를 사용하여 bfs 느낌으로 풀이를 시도했습니다. 자두의 위치, 움직인 횟수, 지나간 초 를 상태를 구성하는 요소들로 생각하고, 배열의 값은 그 상태에서 가질 수 있는 최대 자두개수를 저장하였다. --> 이 아이디어가 문제 푸는 핵심 아이디어입니다. 예를 들어 1번나무, 3번 움직임, 6초 지남 상황에서 지금까지 탐색한 최대 자두개수가 3이라고 할게요. 큐의 원소를 꺼내서 다음 상황을 보았는데 1번나무, 3번 움직임, 6초 지남이 등장하였고, 자두개수는 5가 된다고 하면 배열을 업데이트해주었습니다. 배열 업데이트와 동시에 큐에 삽입하고, answer에 현재 얻은 자두가 최대일 지 모르니 매번 더 큰값을 할당해주었습니다. 한가지 트릭은 비트 연산자를 사용하여 현재 자두의 위치와 자두가 떨어지는 위..
2023.03.27 -
[백준] 2251 물통 (골드 5)
물통의 상태를 매번 큐에 넣어주면서 이전에 도달하지 못했던 상태면 큐에 삽입해주고 방문처리를 하는 방식으로 진행했다. 미로찾기와 같은 형태의 상황만 bfs를 사용하는 것이 아니라, 현재의 상태에서 다음 상태로 연결되는 상황이기만 한다면 bfs를 떠올려보아야 한다. visited 는 (A, B, C)에 들어있는 물의 양의 튜플이 들어가는 set으로 정의했는데, 문제를 다 풀고 생각해보니, 물의 총량은 일정하기 때문에 3개의 물통 중 2개의 물통에 들어있는 양만 저장하면 된다. 즉, visited를 200*200의 2차원 배열로 만들었어도 충분히 가능했다는 말이다. 시간복잡도 측면에서 약간 이득이 될 것 같다. from collections import deque import sys input = sys.s..
2023.03.22 -
[백준] 6593 상범 빌딩 (골드 5)
bfs를 활용하여 두 지점이 연결되어 있는 지 여부를 판단하는 전형적인 문제이다. 삼차원 배열을 받아오는 과정에서 어색한 느낌이 있었다. 그리고 다음 위치를 판단하는 과정에서 갈 수 있는 곳을 기준으로 체크하다보니 'E' 지점을 포함시키지 못해서 에러가 계속 났다. 갈 수 없는 곳을 기준으로 체크해서 해결할 수 있었다. 이동거리를 방문처리배열의 값으로 지정해주는 방식으로 큐에 넣는 원소의 개수를 최소화했다. (큐에 넣는 것도 가능하다.) from collections import deque import sys input = sys.stdin.readline ## L : 층 ## R : 행 ## C : 열 while True: L, R, C = map(int, input().rstrip().split())..
2023.03.21