본문 바로가기

프로그래밍/PS

[C++] 백준 2840번: 행운의 바퀴

반응형

2840번: 행운의 바퀴

문제 바로가기

이 문제에서 주의할 사항들

  1. 바퀴에 같은 글자는 두 번 이상 등장하지 않는다.
  2. 새로 지정할 칸에 ?가 아닌 다른 글자가 있으면 안 된다.
  3. ?는 두 번 이상 등장해도 괜찮다.

나는 1번을 늦게 파악했다. 문제를 제대로 읽어봤어야 했다.

3번은 어쩌면 당연한 것이지만, 1번을 처리하는 과정에서 A???와 같은 결과가 !로 바뀐다.

이를 주의해야 했다.

나는 이 문제를 vector를 이용해 풀었다.

코드 자체는 간단하다.

#include <cstdio>
#include <vector>

using namespace std;

int main() {
	int N, K;
	scanf("%d %d", &N, &K);

	vector<char> wheel(N, '?');
	auto iter = wheel.begin();
	for (int i = 0; i < K; i++) {
		int S;
		char C;
		scanf("%d %c", &S, &C);
		S %= N;
		for (int i = 0; i < S; i++) {
			if (iter == wheel.begin())
				iter = wheel.end() - 1;
			else
				--iter;
		}
		if (*iter == '?')
			*iter = C;
		else if (*iter != C) {
			printf("!\n");
			return 0;
		}
	}

	for (auto outer = wheel.begin(); outer != wheel.end(); ++outer) {
		for (auto inner = wheel.begin(); inner != wheel.end(); ++inner) {
			if (*outer == *inner && outer != inner && *inner != '?') {
				printf("!\n");
				return 0;
			}
		}
	}

	for (int i = 0; i < N; i++) {
		if (iter == wheel.end())
			iter = wheel.begin();
		printf("%c", *iter);
		++iter;
	}
	printf("\n");
	return 0;
}
반응형

'프로그래밍 > PS' 카테고리의 다른 글

[C++] 백준 7576번: 토마토  (0) 2020.10.08
[C++] 백준 2178번: 미로 탐색  (0) 2020.10.06
[C++] 백준 1260번: DFS와 BFS  (0) 2020.10.04
[C++] 백준 1463번: 1로 만들기  (0) 2020.09.30
[C++] 백준 18111번: 마인크래프트  (0) 2020.09.27