몽셀통통의 블로그
[BaekJoon] 9019 DSLR :: monton 본문
문제
https://www.acmicpc.net/problem/9019
풀이
최소한의 명령어를 나열하라고 하였으므로 bfs를 사용
최소 시간이 아니므로 명령어를 담을 큐도 추가로 구현해 준다
이미 방문했던 숫자는 이미 최소의 명령어가 있다는 의미 이므로
visit 배열을 사용해서 다시 방문하지 않게 해준다
코드
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 | #include<iostream> #include<queue> #include<string> using namespace std; int A, B; int visit[10000]; int main() { int T; cin >> T; for (int t = 0; t < T; t++) { cin >> A >> B; queue<int> qx; queue<string>qs; qx.push(A), qs.push(""); for (int i = 0; i < 10000; i++) visit[i] = 0; visit[A] = 1; while (!qx.empty()) { int x = qx.front(); string s = qs.front(); qx.pop(), qs.pop(); if (x == B) { cout << s << endl; break; } for (int i = 0; i < 4; i++) { string str = s; int nx = x; if (i == 0) { nx *= 2; str += 'D'; } else if (i == 1) { nx -= 1; str += 'S'; } else if (i == 2) { int num = nx / 1000; nx = (nx % 1000) * 10 + num; str += 'L'; } else { int num = (nx % 10) * 1000; nx = (nx / 10) + num; str += 'R'; } nx = nx >= 10000 ? nx%10000 : nx; nx = nx == -1 ? 9999 : nx; if (visit[nx]) continue; qx.push(nx), qs.push(str); visit[nx] = 1; } } } } | cs |
'프로그래밍 > 백준 문제 풀기' 카테고리의 다른 글
[BaekJoon] 2589 보물섬 :: monton (0) | 2018.08.30 |
---|---|
[BaekJoon] 1261 알고스팟 :: monton (0) | 2018.08.29 |
[BaekJoon] 1520 내리막 길 :: monton (0) | 2018.08.28 |
[BaekJoon] 11559 Puyo Puyo :: monton (0) | 2018.06.13 |
[BaekJoon] 2174 로봇 시뮬레이션 :: monton (0) | 2018.06.13 |