처음에 문제 이해가 너무 어려워서 노트에 따로 정리해가며 문제를 이해했다. 바퀴가 시계 방향으로 돌아가기 때문에 그 반대 방향으로 화살표가 움직일 것이다. 이를 이해하고 나서 문제를 풀어야 한다.
글자가 들어올 때 추가해주고, 만약 같은 문자를 두 번 적는다고 했을 때 오류이므로 그것도 확인해줘야 한다. (이건 백준 예제 입력, 출력에 없어서 질문을 통해 알아냈다.)
#include <iostream>
#include <vector>
using namespace std;
void 회전판(int n, int k) {
vector <char> v(n, '?'); //다 ?로 초기화
int now = n-1; //현재 가리키고 있는 인덱스 번호
while(k--) {
int s; char c;
cin >> s >> c;
now = (now + s) % n;
if (v[now] == '?'||v[now]==c) {
//배열 안이 비어있거나 넣으려는 글자와 같은 글자가 들어있을 때
v[now] = c;
}
else {
//배열 안에 이미 다른 문자가 들어왔을 때
cout << "!";
return;
}
}
//마지막 확인
for (int i = 0;i < n;i++) {
for (int j = i+1;j < n;j++) {
if (v[i] != '?' && v[i] == v[j]) {
cout << "!";
return;
}
}
}
for (int i = 0;i < n;i++) {
cout << v[now];
now--;
if (now <0) {
now += n;
}
}
return;
}
int main() {
int n, k;
cin >> n >> k;
회전판(n, k);
return 0;
}
'백준' 카테고리의 다른 글
[백준/C++] 17087: 숨바꼭질 6 (0) | 2025.03.06 |
---|---|
[백준/C++] 4949: 균형잡힌 세상 (0) | 2025.02.26 |
[백준/C++] 2164: 카드2 (0) | 2025.02.26 |
[백준/C++] 10757: 큰 수 A+B (0) | 2025.02.24 |
[백준/C++] 11478: 서로 다른 부분 문자열의 개수 (0) | 2025.02.18 |