행운의 바퀴
https://www.acmicpc.net/problem/2840
#include <iostream>
#include <deque>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
deque<char>lucky_chain;
int size, m;
cin >> size >> m;
lucky_chain.assign(size, '?');
int flag = 0;
for (int i = 0;i < m;i++) {
int num;
char alph;
cin >> num >> alph;
flag = (flag + num) % size;
if (lucky_chain[flag] != alph && lucky_chain[flag] != '?') {
cout << '!';
return 0;
}
else {
lucky_chain[flag] = alph;
}
for (int k = 0;k < size;k++) {
if ((flag != k) && (lucky_chain[k] == alph)) {
cout << '!';
return 0;
}
}
}
for (int j = 0;j < size;j++) {
cout << lucky_chain[flag];
flag = (flag - 1 + size) % size;
}
return 0;
}
예외 처리에 문제가 있어서 몇번 틀림.
바퀴에 겹치는 문자가 생겼을 때를 확인하기 위해 for 문 을 사용하여 데크의 원소와 하나씩 비교해 확인해줌.
입력하려는 칸에 ?가 아닌 다른 알파벳이 존재할 경우 그 알파벳이 인수로 전달받은 알파벳과 다르다면 !를 출력하도록 해줌.
원형 자료구조를 사용하기 위해 flag변수를 바퀴의 화살표로 나타내주었고 이를 원판의 사이즈로 나머지 연산을 해줘 인덱스 값으로 사용할 수 있도록 하였다.
데크의 원소를 모두 '?'로 바꿔주기 위해 데크.assign(size,'?');메소드를 이용해주었다.