백준

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

홍시뗄레 2025. 3. 6. 17:32

처음에 문제 이해가 너무 어려워서 노트에 따로 정리해가며 문제를 이해했다. 바퀴가 시계 방향으로 돌아가기 때문에 그 반대 방향으로 화살표가 움직일 것이다. 이를 이해하고 나서 문제를 풀어야 한다. 

글자가 들어올 때 추가해주고, 만약 같은 문자를 두 번 적는다고 했을 때 오류이므로 그것도 확인해줘야 한다. (이건 백준 예제 입력, 출력에 없어서 질문을 통해 알아냈다.)

#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;
}