※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2840번 문제인 비밀번호이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2840 

 

2840번: 행운의 바퀴

첫째 줄에 마지막 회전에서 화살표가 가리키는 문자부터 시계방향으로 바퀴에 적어놓은 알파벳을 출력한다. 이때, 어떤 글자인지 결정하지 못하는 칸은 '?'를 출력한다. 만약, 상덕이가 적어놓

www.acmicpc.net

문제를 해결하는 데에 필요한 조작은 바퀴의 시계방향 다음 칸의 문자가 무엇인지와 반시계방향 다음 칸의 문자가 무엇인지를 알아내는 것이다. 이는 deque 자료구조를 이용해 간단하게 탐색할 수 있다.

 

하나의 칸에 여러 문자가 등장할 수 있어 모순이 일어나는 경우 외에도 전체 바퀴에 중복되는 문자가 등장해도 안 됨에 유의해 구현하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <deque>
using namespace std;

int N, K;
deque<char> que;
bool visited[128];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> K;
	for (int i = 0; i < N; i++) que.push_back('?');
	while (K--) {
		int M; char c; cin >> M >> c;
		M--;
		while (M--) {
			que.push_back(que.front());
			que.pop_front();
		}

		if (que.front() == '?') {
			if (visited[c]) {
				cout << '!';
				return 0;
			}
			que.push_back(c);
			que.pop_front();
			visited[c] = 1;
		}
		else if (que.front() == c) {
			que.push_back(c);
			que.pop_front();
		}
		else {
			cout << '!';
			return 0;
		}
	}

	while (!que.empty()) {
		cout << que.back();
		que.pop_back();
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 2036 // C++] 수열의 점수  (1) 2024.01.22
[BOJ 2910 // C++] 빈도 정렬  (0) 2024.01.21
[BOJ 2865 // C++] 나는 위대한 슈퍼스타K  (1) 2024.01.19
[BOJ 2823 // C++] 유턴 싫어  (0) 2024.01.18
[BOJ 2994 // C++] 내한 공연  (0) 2024.01.17

+ Recent posts