Loading...

BFS 최단경로 역추적하는 방법 배우기

1. 문제 24463번: 미로 (acmicpc.net) 24463번: 미로 첫 번째 줄에는 미로의 크기 $N, M$이 주어진다. $(3 \le N, M \le 2,001$, $N, M$은 홀수$)$ 두 번째 줄부터는 미로의 정보가 주어진다. 두 번째 줄부터 $N$줄에 거쳐 각 줄에는 길이가 $M$이고 .과 +만으로 이 www.acmicpc.net 입구에서 출구로 가는데, 최단 경로가 아닌 경로는 모두 @로 바꿔서 표시하는 문제 2. DFS 풀이 최단 경로가 아닌 경로를 찾는게 그냥 찾을려하면 생각보다 까다롭다 아이디어의 핵심은 이동할 수 있는 모든 위치 .을 먼저 @로 바꿔놓는다 n,m = map(int,stdin.readline().split()) maze = [list(stdin.readline()...

3차원 BFS에서 조금은 섬세한 디테일 -공주님을 구해라!-

1. 문제 17836번: 공주님을 구해라! (acmicpc.net) 17836번: 공주님을 구해라! 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 www.acmicpc.net (1,1)에서 용사가 (N,M)에 있는 공주님을 구하고자 움직일 수 있는 최단 시간을 구하는 프로그램을 작성 맵에 반드시 하나가 있는 전설의 명검 그람을 획득하였으면 제한 없이 벽을 부수고 이동할 수 있다 2. 풀이 분명 쉬운 문제지만... 너무 쉽게 생각하면 틀리기 쉽다고 해야하나.. 잘못된 생각 >> 그람이 반드시 하나가 있다면, 그람을 획득하고 이동해야 최단시간? >> 하지만..

2022. 10. 30. 21:21

DFS로 블록을 만드는 예술적인 방법? -테트로미노-

1. 문제 14500번: 테트로미노 (acmicpc.net) 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 이차원 배열에 주어진 블록중 하나를 놓아봐서 거기에 적힌 수의 합의 최댓값을 구하는 문제 2. 풀이 항상 이걸 어떻게 해?라고 두려워하지말고 어렵게 생각하지 말고 성실하게 완전탐색을 구현하면 풀린다는 생각으로 심플하게 5가지 블록의 회전,대칭 모든 가능한 경우를 만들어서 모든 좌표에 대해 조사해보면 진짜로 최댓값이 나오긴 해 근데 변수를 어디서 초기화해야하는지, 그런 실수가 쉽게 나오더라 블록의 회전,대..

2022. 9. 26. 22:37

이동가능한지 많은 것을 고려해야하는 BFS -탈주범 검거-

1. 문제 1953. 모의 sw 역량테스트 탈주범 검거 SW Expert Academy SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 탈주범이 시작 위치에서 터널을 통해 이동할 때, 일정 시간 후에 탈주범이 존재할 수 있는 곳의 개수를 구하는 문제 2. 풀이 어쨌든 성실하게 하나하나 구현하면 되는 문제 전형적인 BFS이지만 이동할 수 있는 조건이 복잡하고 까다로워서 실수할 수도 있는 문제 1) map의 범위를 벗어나는 곳은 이동 불가능 2) map에서 0인 곳은 이동할 수 없다 3) 주어진 터널 방향으로만 이동 가능하다 map에서 1번은 4방향으로 이동 가능하고, 2번은 상,하, 3번은 좌,우,..... 7번..

2022. 9. 23. 03:02

DFS/BFS 정복하기 -영역을 구분하는 BFS의 성질 응용-

1. 문제 16234번: 인구 이동 (acmicpc.net) 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net N*N 크기의 배열에서 인접한 두 칸의 크기 차이가 L이상, R이하이면 연합을 이룬다. 모든 연합을 이루게 하고, 크기를 조절한 다음에 이러한 과정을 반복할때, 몇번이나 가능한지 구하는 프로그램을 작성 2. 풀이 문제를 잘 읽어보면 시뮬레이션을 수행해야한다 주어진 배열에서 인접한 두 칸의 차이가 L 이상, R 이하인지를 파악한다. 그러한 두 칸을 서로 연결하고, 이것을 배열의 모든 칸에 대..

2022. 9. 18. 03:19

BFS/DFS 정복기 -memoization을 이용한 효율적인 탐색-

1. 문제 1861. 정사각형 방 ttps://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc&categoryId=AV5LtJYKDzsDFAXc&categoryType=CODE&problemTitle=정사각형+방&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 $n^{2}$개의 방이 $N*N$ 형태로 늘어서있고, 각각은 1부터 $n^{2}$이하까지 전부 서로 다른 수로 순서와 무관하게 적혀있다. 어떤 방에 있을때, 정확히 현재 방보다 1 더 큰 수가 적힌 방으로만 이동할 수 있다고 할때, 처음에 어떤 수가 ..