반응형
https://www.acmicpc.net/problem/12761
12761번: 돌다리
동규와 주미는 일직선 상의 돌 다리 위에있다. 돌의 번호는 0 부터 100,000 까지 존재하고 동규는 \(N\)번 돌 위에, 주미는 \(M\)번 돌 위에 위치하고 있다. 동규는 주미가 너무 보고싶기 때문에 최대
www.acmicpc.net
[ 문제풀이 ]
1. A, B, N, M을 입력받고, visited 배열을 만들어 방문 여부를 저장합니다.
2. bfs를 이용하여 8가지 경우의 수를 통해 이동하면서 cnt값을 올려주고, 현재 위치가 M이라면 cnt 값을 출력하고 종료합니다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include<iostream> #include<queue> using namespace std; int A, B, N, M; int visited[100001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> A >> B >> N >> M; queue<pair<int, int>>q; q.push({ N,0 }); visited[N] = 1; while (!q.empty()) { const int cur = q.front().first; const int cnt = q.front().second; q.pop(); if (cur == M) { cout << cnt; return 0; } if (cur < M) { if (cur + 1 <= 100000 && visited[cur + 1] == 0) { visited[cur + 1] = 1; q.push({ cur + 1,cnt + 1 }); } if (cur + A <= 100000 && visited[cur + A] == 0) { visited[cur + A] = 1; q.push({ cur + A,cnt + 1 }); } if (cur + B <= 100000 && visited[cur + B] == 0) { visited[cur + B] = 1; q.push({ cur + B,cnt + 1 }); } if (cur * A <= 100000 && visited[cur * A] == 0) { visited[cur * A] = 1; q.push({ cur * A,cnt + 1 }); } if (cur * B <= 100000 && visited[cur * B] == 0) { visited[cur * B] = 1; q.push({ cur * B,cnt + 1 }); } } if (cur - 1 >= 0 && visited[cur - 1] == 0) { visited[cur - 1] = 1; q.push({ cur - 1,cnt + 1 }); } if (cur - A >= 0 && visited[cur - A] == 0) { visited[cur - A] = 1; q.push({ cur - A,cnt + 1 }); } if (cur - B >= 0 && visited[cur - B] == 0) { visited[cur - B] = 1; q.push({ cur - B,cnt + 1 }); } } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 2015번 - 수들의 합 4 (C++) (0) | 2023.09.23 |
---|---|
[ 백준 ] 13565번 - 침투 (C++) (0) | 2023.09.22 |
[ 백준 ] 12016번 - 라운드 로빈 스케줄러 (C++) (0) | 2023.09.20 |
[ 백준 ] 17609번 - 회문 (C++) (0) | 2023.09.19 |
[ 백준 ] 5569번 - 출근 경로 (C++) (0) | 2023.09.18 |