Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 조합
- dfs
- 중복 순열
- 우선순위 큐
- DP
- 세그먼트 트리
- 피보나치 수
- 링크드리스트
- SSAFY
- Knapsack
- 분할 정복
- 스택
- 클래스
- 문자열
- 큐
- 크루스칼
- MST
- 그리디
- 완전 탐색
- lis
- BFS
- 빠른 입출력
- 시뮬레이션
- 순열
- BeautifulSoup
- 비트마스크
- 백트래킹
- 이분 탐색
- 재귀
- 메모리풀
Archives
- Today
- Total
작심 24/7
[백준] 9019번 DSLR 본문
9019번: DSLR
문제 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스�
www.acmicpc.net
D, S, L, R 각 경우에 맞게 값을 변형시킨 다음
그 값이 될 때까지 어떤 과정이 있었는지 배열에 저장한 뒤
그 값이 B가 되면 출력하면 된다.
여기서 주의할 점은 네 자리 레지스터라서
'L 적용 시 123이니까 231이겠지'라고 생각하면 안 된다.
123은 0123으로 취급하여 L 적용 시 1230이 된다.
처음에 잘못 생각하고 string으로 복잡하게 변형시켜주다 시간 초과 걸렸었다.
이 점만 주의해주면 굳이 string 쓸 필요 없이 계산으로 변형 가능하다.
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int num, temp;
void Bfs(int B, string res[], bool visited[], queue <int> q) {
while (!q.empty()) {
if (q.front() == B) break;
num = 2 * q.front() % 10000;
if (!visited[num]) {
res[num] = res[q.front()] + "D";
if (num == B) break;
q.push(num);
visited[num] = true;
}
if (q.front() == 0) num = 9999;
else num = q.front() - 1;
if (!visited[num]) {
res[num] = res[q.front()] + "S";
if (num == B) break;
q.push(num);
visited[num] = true;
}
temp = q.front() / 1000;
num = q.front() % 1000;
num = num * 10 + temp;
if (!visited[num]) {
res[num] = res[q.front()] + "L";
if (num == B) break;
q.push(num);
visited[num] = true;
}
temp = q.front() / 10;
num = q.front() % 10;
num = num * 1000 + temp;
if (!visited[num]) {
res[num] = res[q.front()] + "R";
if (num == B) break;
q.push(num);
visited[num] = true;
}
q.pop();
}
}
int main() {
int T, A, B;
cin >> T;
for (int t = 0; t < T; t++) {
cin >> A >> B;
queue <int> q;
q.push(A);
bool visited[10001] = { false };
visited[A] = true;
string res[10001];
Bfs(B, res, visited, q);
cout << res[B] << "\n";
}
return 0;
}
'백준' 카테고리의 다른 글
[백준] 1039번 교환 (0) | 2020.06.19 |
---|---|
[백준] 1525번 퍼즐 (C++, JAVA) (0) | 2020.06.19 |
[백준] 16397번 탈출 (C++, JAVA) (0) | 2020.06.18 |
[백준] 2206번 벽 부수고 이동하기 (C++) (0) | 2020.06.16 |
[백준] 3055번 탈출 (0) | 2020.06.16 |
Comments