728x90
반응형
SMALL

너비 우선 탐색 39

[Python] 16948번 데스 나이트

✏️ 문제 문제 파악7562번 나이트의 이동 의 업그레이드 버전인 듯? 똑같이 풀면 쉽게 답이 나온다! 알고리즘그래프 이론그래프 탐색너비 우선 탐색  코드from collections import dequeimport sysinput = sys.stdin.readlinen = int(input())graph = [[0] * (n) for _ in range(n)]visited = [[0] * (n) for _ in range(n)] d = [(-2, -1), (-2, 1), (0, -2), (0, 2), (2, -1), (2, 1)]start_x, start_y, end_x, end_y = map(int, input().split())def bfs(x, y): q = deque([(x, y)]) vi..

PS/BOJ 2024.08.28

[Python] 24445번 알고리즘 수업 - 너비 우선 탐색 2

✏️ 문제 문제 파악예전 트리 부모 찾기  문제랑 비슷한 맥락이다.인접리스트를 사용해서 풀었고 BFS를 활용했다.  개수가 아닌 순서이므로 들렸으면 +1 씩 해줘야 한다. 그래서 인접리스트의 한 배열을 방문한 후에 순서를 +1 하도록 코드를 짰다.그리고 문제에서 내림차순으로 방문한다고 했으므로 인접리스트의 한 배열을 방문하기 전에 인접리스트를 내림차순하고 돌아가도록 코드를 구성했다. 알고리즘그래프 이론그래프 탐색너비 우선 탐색정렬  코드from collections import dequeimport sysinput = sys.stdin.readlinen, m, r = map(int, input().split())graph = [[] * (n+1) for _ in range(n+1)]visited = [0..

PS/BOJ 2024.08.27

[Python] 11123번 양 한마리... 양 두마리...

✏️ 문제 문제 파악상하좌우 4가지가 붙어있으면 하나의 무리가 되므로 다음과 같이 방향 배열을 구성했다.d = [(1, 0), (0, 1), (-1, 0), (0, -1)] 무리의 개수를 구하는 것이므로 BFS가 한 무리를 돌 때마다 +1 하면 무리의 개수가 나온다. 알고리즘그래프 이론그래프 탐색너비 우선 탐색깊이 우선 탐색  코드from collections import dequeimport sysinput = sys.stdin.readlinefor _ in range(int(input())): h, w = map(int, input().split()) graph = [[0] * w for _ in range(h)] visited = [[0] * w for _ in range(h)] d = [(..

PS/BOJ 2024.08.27

[Python] 16173번 점프왕 쩰리 (Small)

✏️ 문제 문제 파악문제를 읽어봤을 때 방향이 정해졌을 시 그 방향으로 칸에 적혀있는 수만큼 움직일 수 있는 것 같았다. 그래서 다음과 같이 코드를 짰다.다음 x위치 = 현재 x위치 + (움직일 방향 * 현재 밟고 있는 칸에 쓰여 있는 수)다음 y위치 = 현재 y위치 + (움직일 방향 * 현재 밟고 있는 칸에 쓰여 있는 수)  다음 x, y 위치가 -1일 경우 1을 리턴하고 끝까지 만나지 못할 경우 0을 리턴하여 이 리턴값을 기준으로 출력하는 문자열을 달리하였다. 알고리즘구현브루트포스 알고리즘그래프 이론그래프 탐색너비 우선 탐색깊이 우선 탐색  코드from collections import dequeimport sysinput = sys.stdin.readlinen = int(input())graph =..

PS/BOJ 2024.08.27

[Python] 14716번 현수막

✏️ 문제 문제 파악글자인 부분 1이 상, 하, 좌, 우, 대각선으로 인접하여 서로 연결되어 있다면 한 개의 글자라고 생각하므로 다음과 같이 방향 배열을 구성했다.d = [(-1, 0), (0, 1), (1, 0), (0, -1), (-1, -1), (-1, 1), (1, 1), (1, -1)] 글자의 개수를 구하는 것이므로 BFS가 한 번 돌면 한 글자이므로 돌 때마다 +1 하면 글자의 개수가 나온다.알고리즘그래프 이론그래프 탐색너비 우선 탐색깊이 우선 탐색  코드from collections import dequem, n = map(int, input().split())graph = [[0] * n for _ in range(m)]visited = [[0] * n for _ in range(m)]d ..

PS/BOJ 2024.08.27

[Python] 12761번 돌다리

✏️ 문제 문제 파악최소한의 이동 횟수를 출력하라 했으므로 BFS를 사용하여 푼다.동규가 현재 위치에서 다음 위치로 갈 수 있는 방법은 8가지가 있다.현재 위치 - 1현재 위치 + 1현재 위치 - A현재 위치 + A현재 위치 - B현재 위치 + B현재 위치 * A현재 위치 * B현재 위치에서 위 8가지의 다음 위치를 덱에 넣는 방법은 다음과 같다.for next_v in (v-1, v+1, v-a, v-b, v+a, v+b, v*a, v*b): q.append(next_v) 이렇게 for 문을 만들면 next_v에 8가지의 v의 다음 위치가 차례대로 대입하게 된다. 처음엔 graph와 visited 배열의 크기를 주미의 위치까지만 만들었는데 생각해보니 주미의 위치보다 더 멀리갔다가 다시 돌아오는 경..

PS/BOJ 2024.08.27

[Python] 2468번 안전 영역

✏️ 문제 문제 파악나는 visited 2차원 배열의 값을 세 가지로 나눠서 대입하고 이를 이용해 조건문을 구분하였다.0 → 방문 안한 영역1 → 방문한 영역-1 → 물에 잠긴 부분으로 방문하면 안되는 영역또한 이 문제의 경우 가로, 세로로 연결되어 있는 사각형은 건너갈 수 있으므로 방향 배열을 다음과 같이 구성했다.d = [(-1, 0), (1, 0), (0, -1), (0, 1)] water라는 변수의 값을 0 ~ (지역의 최대 높이)로 주어 for 반복문을 도는 코드를 짰다.안전한 영역의 최대 개수를 구하므로 max(이전의 안전한 영역 개수, 현재 안전한 영역 개수)로 하여 결과값을 구했다. 아! 그리고 이 문제는 DFS로 풀 때 재귀를 사용해서 풀면 RecursionError 에러가 발생한다. 이..

PS/BOJ 2024.08.21

[Python] 5014번 스타트링크

✏️ 문제 문제 파악버튼 수의 최솟값을 구하므로 BFS를 활용해서 풀었다. 다음 층이 해당 층 + u 또는 해당 층 - d 두 가지로 나뉘므로 다음과 같이 코드를 구현했다.그리고 버튼의 수를 저장하기 위해 다음 층 = 해당 층 + 1 를 하였다.for next_node in (node+u, node-d): if 0  예제는 잘 돌아가는데 틀렸습니다가 뜨는 경우 가장 아래의 층이 0이 아니라 1인 지 확인해보길..! 알고리즘그래프 이론그래프 탐색너비 우선 탐색  코드from collections import dequef, s, g, u, d = map(int, input().split())graph = [0] * (f+1)def bfs(v): q = deque([v]) graph[v] = 1 w..

PS/BOJ 2024.08.20

[Python] 18352번 특정 거리의 도시 찾기

✏️ 문제 문제 파악예전 트리 부모 찾기  문제랑 비슷한 맥락이다.인접리스트를 사용해서 풀었고 BFS를 활용했다.  해당 도시까지 가는 거리가 거리 정보 k와 같다는 조건문을 어디다가 둬야할 지 조금 헤맸다. visited 1차원 배열에 처음 넣은 도시에서 다른 도시까지의 거리를 +1씩 하며 이 거리가 k와 같으면 해당 visited 배열의 인덱스를 출력하는 방식으로 코드를 짰다. 알고리즘그래프 이론그래프 탐색너비 우선 탐색데이크스트라최단 경로  코드from collections import dequeimport sysinput = sys.stdin.readlinen, m, k, x = map(int, input().split())graph = [[] * (n+1) for _ in range(n+1)]v..

PS/BOJ 2024.08.20

[Python] 1743번 음식물 피하기

✏️ 문제 문제 파악이번 문제에서는 방문할 필요가 없는 위치가 아니라 방문해야 하는 위치만 알려주므로 이를 잘 알고 코드를 짜야한다.나는 다음과 같이 visited 배열을 줬다. 1 → 음식물이 있지만 방문하지 않은 위치2 → 음식물이 있어 이미 방문한 위치이를 바탕으로 다음 위치를 방문할 때 다음 위치가 음식물이 있지만 방문하지 않은 위치인 지(if visited[위치] == 1) 조건문을 주어 풀었다. 알고리즘그래프 이론그래프 탐색너비 우선 탐색깊이 우선 탐색  코드from collections import dequen, m, k = map(int, input().split())graph = [[0] * m for _ in range(n)]visited = [[0] * m for _ in range(..

PS/BOJ 2024.08.16
728x90
반응형
LIST