-
[9019] DSLRBOJ 2021. 10. 2. 11:03
https://www.acmicpc.net/problem/9019
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
<문제>
L 연산은 cur%1000*10으로 d2, d3, d4 3자리를 구성한 뒤 cur/1000을 더해주어서 구현한다.
R연산도 L연산과 마찬가지로 구현해주면 되겠다.
출력해야하는 값, 즉 명령어의 순서를 파악하기 위해서
현재 정점을 {현재 숫자(int), 명령어의 순서(string)}으로 구성했다.
<소스코드>
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <bits/stdc++.h>using namespace std;int t, a, b;bool _visit[10000];int main(void) {cin >> t;while (t--) {cin >> a >> b;queue<pair<int, string>> q;q.push({a, ""});memset(_visit, false, sizeof(_visit));_visit[a] = true;while (!q.empty()) {pair<int, string> cur = q.front();q.pop();if (cur.first == b) {cout << cur.second << '\n';break;}int D = cur.first * 2 % 10000;if (_visit[D] == false) {_visit[D] = true;q.push({D, cur.second + "D"});}int S = cur.first - 1;if (S == -1) S = 9999;if (_visit[S] == false) {_visit[S] = true;q.push({S, cur.second + "S"});}int L = (cur.first % 1000) * 10 + (cur.first / 1000);if (_visit[L] == false) {_visit[L] = true;q.push({L, cur.second + "L"});}int R = 1000 * (cur.first % 10) + cur.first / 10;if (_visit[R] == false) {_visit[R] = true;q.push({R, cur.second + "R"});}}}return 0;}cs 'BOJ' 카테고리의 다른 글
[20056] 마법사 상어와 파이어볼 (0) 2021.10.02 [1261] 알고스팟 (0) 2021.10.02 [1697] 숨바꼭질 (0) 2021.10.01 [9012] 괄호 (0) 2021.10.01 [4344] 평균은 넘겠지 (0) 2021.10.01