9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
처음에는 rotate함수 이용해서 string을 돌려서 짰는데
그러다보니 시간 초과가 나는 것이다.
int로 바꿔 계산하니 올바른 결과가 나왔다.
#include <bits/stdc++.h> using namespace std; bool visited[10001]; int main(){ ios_base :: sync_with_stdio(false); cin.tie(NULL); int T; cin >> T; queue<pair<int, string> > q; while(T--){ int A, B; cin >> A >> B; q.push(make_pair(A, "")); while(!q.empty()){ pair<int, string> now = q.front(); q.pop(); int x = now.first; if(x == B) { cout << now.second << '\n'; break; } int twice = (x * 2) % 10000; if(!visited[twice]) { visited[twice] = true; q.push(make_pair(twice, now.second + "D")); } int minus = (x == 0 ? 9999 : x - 1); if(!visited[minus]) { visited[minus] = true; q.push(make_pair(minus, now.second + "S")); } int left = (x % 1000) * 10 + (x / 1000); if(!visited[left]) { visited[left] = true; q.push(make_pair(left, now.second + "L")); } int right = (x % 10) * 1000 + (x / 10); if(!visited[right]) { visited[right] = true; q.push(make_pair(right, now.second + "R")); } } while(!q.empty()) { pair<int,string> now = q.front(); q.pop(); }; memset(visited, false, sizeof(visited)); } return 0; }
'백준 > 클래스' 카테고리의 다른 글
[6] [Class 3] - 백준 11724 연결 요소의 개수 (0) | 2021.01.23 |
---|---|
[5] [Class 3] - 백준 10026 적록색약 (0) | 2021.01.22 |
[3] [Class 3] - 백준 7662 이중 우선순위 큐 (0) | 2021.01.22 |
[2] [Class 3] - 백준 1697 숨바꼭질 (0) | 2021.01.21 |
[1] [Class 3] - 백준 5525 IOIOI (0) | 2021.01.21 |
댓글