Recent Posts
Notice
No Rules Rules
DSLR (feat. 백준, 9019번) 본문
728x90
반응형
DSLR
https://www.acmicpc.net/problem/9019
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
반응형
// woohyeon.kim
#include <iostream>
#include <queue>
using namespace std;
inline int calc_D(register int n) {
return (n << 1) % 10000;
}
inline int calc_S(register int n) {
if (n == 0)
n = 9999;
else
n -= 1;
return n;
}
inline int calc_L(register int n) {
register int d1 = n / 1000;
register int d2 = (n % 1000) / 100;
register int d3 = (n % 100) / 10;
register int d4 = (n % 10);
return d2 * 1000 + d3 * 100 + d4 * 10 + d1;
}
inline int calc_R(register int n) {
register int d1 = n / 1000;
register int d2 = (n % 1000) / 100;
register int d3 = (n % 100) / 10;
register int d4 = (n % 10);
return d4 * 1000 + d1 * 100 + d2 * 10 + d3;
}
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
register int T;
cin >> T;
for (register int t = 0, A, B, D, S, L, R; t < T; ++t) {
bool visit[10000]{ false };
string dp[10000]{ "" };
cin >> A >> B;
queue<int> q;
q.push(A);
visit[A] = true;
while (!q.empty()) {
auto a = q.front(); q.pop();
if (a == B)
break;
if (!visit[D = calc_D(a)])
visit[D] = true, dp[D] = dp[a] + "D", q.push(D);
if (!visit[S = calc_S(a)])
visit[S] = true, dp[S] = dp[a] + "S", q.push(S);
if (!visit[L = calc_L(a)])
visit[L] = true, dp[L] = dp[a] + "L", q.push(L);
if (!visit[R = calc_R(a)])
visit[R] = true, dp[R] = dp[a] + "R", q.push(R);
}
cout << dp[B] << "\n";
}
return 0;
}
// *&)*@*
- S의 조건에서 실수가 있어서 정답을 도출하기 힘들었습니다. n -= 1 이후 n이 0일때 9999로 변경이 아니라 입력받은 그 자체가 0일때 9999로 변경입니다.
- 그 외에는 일반적인 dp 형태로 진행합니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
트리의 지름 (feat. 백준, 1167번) (0) | 2022.08.26 |
---|---|
트리의 부모 찾기 (feat. 백준, 11725번) (0) | 2022.08.26 |
숨바꼭질 4 (feat. 백준, 13913번) (0) | 2022.08.25 |
플로이드 2 (feat. 백준, 11780번) (2) | 2022.08.25 |
LCS 2 (feat. 백준, 9252번) (0) | 2022.08.25 |
Comments