본문 바로가기

algorithm

(69)
백준 7562번 나이트의 이동 https://www.acmicpc.net/problem/7562 아이디어:1. 방향 dx, dy를 나이트의 이동에 맞게 변경하고 거리를 기록하는 BFSint dx[8] = { 2, 1, -1, -2, -2, -1, 1, 2 }; int dy[8] = { 1, 2, 2, 1, -1, -2, -2, -1 }; #include #include using namespace std;int board[301][301];int vis[301][301];int dx[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };int dy[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ..
백준 7569번 토마토 https://www.acmicpc.net/problem/7569 아이디어:1.3차원 BFS7576번 토마토의 3차원 문제2. tuple 사용삽입 Q.push({ nx, ny, nz});cur 선언 tuple cur = Q.front();확인 get(cur) = cur의 1번째 값, get(cur) = cur의 2번째 값, get(cur) = cur의 3번째 값대입 ans = vis[get(cur)][get(cur)][get(cur)]; 배열 인덱스와 N, M, H의 순서에 주의3. 방향 dx, dy에 이어 int dz[6] = { 0, 0, 0, 0, 1, -1}; 추가가운데 익은 토마토를 기준으로 x, y, z 방향 처리4. 배열 인덱스 board[][][], vis[][][]와 N, M, H의 순서..
백준 10026번 적록색약 https://www.acmicpc.net/problem/10026 아이디어:1. 비적녹색맹 BFS 수행 후 적녹색맹 BFS 수행비적녹색맹 먼저 BFS 수행하며 nonBlind++;vis[][]를 다시 0으로 초기화한 뒤에board[][]의 'G'를 모두 'R'로 변경한 뒤 적녹색맹 BFS 수행하며 blind++;2. 이중 for문으로 순회하며 vis[][]가 0인 곳을 새로운 시작점으로 큐에 push()한 뒤 BFS 수행 #include #include using namespace std;char board[101][101];int vis[101][101];int n;int dx[4] = { 1, 0, -1, 0 };int dy[4] = { 0, 1, 0, -1 };int main() { ios::sy..
백준 1012번 유기농 배추 아이디어:1. BFS2. 시작점이 여러개이므로 2중 for문으로 순회하면서 시작점을 찾고 하나의 배추 무리씩 점검 및 BFS를 수행한다.3. board[][], vis[][]를 포함한 각 변수에 대한 초기화에 주의한다. #include #include using namespace std;int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t, n, m, k, i, j; cin >> t; int dx[4] = { 1, 0 , -1, 0 }; int dy[4] = { 0, 1 , 0, -1 }; while (t--) { int board[51][51]; int vis[51][51]; for (int i = 0; i > Q; int a..
백준 1697번 숨바꼭질 https://www.acmicpc.net/problem/1697 아이디어:1. 2차원 BFS2. x와 y BFS에서 y가 없는 것이라고 생각하고 구현3. n과 k의 범위가 100000인 것이지 board는 100000이 아니며, 최대 200000을 가정한다.탐색 범위가 100000을 넘어간 경우엔 어차피 -1만 할 것이고, 게다가 *2로 100000을 벗어난 경우 -1을 계속 하는 것보다 먼저 -1하고 *2하는게 더 시간상 이득이다.4. n과 k가 같은 경우에 0을 출력할 수 있도록 큐에서 pop()한 뒤, cur == k 를 검사해서 vis[cur]을 출력한다. 풀이에선 일부러 for문을 2개로 둬, 내가 쓰던 BFS 틀에서 벗어나지 않고 알아보기 쉽도록 썼다.즉, 아래 for문은 식별을 위해서이지,..