문제 링크입니다: https://www.acmicpc.net/problem/2840
COCI B번 문제 명성답게 예외처리가 까다로운 문제였습니다.
대표적인 모순은 아래와 같이 두 가지입니다.
1. 해당 인덱스에 '?'가 아닌 문자가 저장되어있는데 또 다른 문자가 저장된다고 하는 경우
2. 룰렛에 중복이 되는 문자가 있으면 안되는데 중복이 발생하는 경우('?' 제외)
2가지 예외처리를 잘 처리하고 인덱스를 모듈러를 통해 시계방향으로 잘 전환하였다면 AC를 받을 수 있는 문제였습니다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, K;
cin >> N >> K;
vector<char> v(N);
fill(v.begin(), v.end(), '?'); //일단 전부 ?표로 저장
int idx = 0;
for (int i = 0; i < K; i++)
{
int temp;
char c;
cin >> temp >> c;
temp %= N;
if (idx - temp < 0)
idx = (idx - temp) + N;
else
idx -= temp;
//한 인덱스에 다른 알파벳 모순
if (v[idx] != '?' && v[idx] != c)
{
cout << "!\n";
return 0;
}
else
v[idx] = c;
}
//중복 없는 조건 모순
for (int i = 0; i < N; i++)
for(int j=i+1; j<N; j++)
if (v[i] != '?' && v[i] == v[j])
{
cout << "!\n";
return 0;
}
for (int i = 0; i < N; i++)
cout << v[(i + idx) % N];
cout << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1972번 놀라운 문자열 (0) | 2018.10.30 |
---|---|
백준 2897번 몬스터 트럭 (0) | 2018.10.30 |
백준 5555번 반지 (0) | 2018.10.29 |
백준 2816번 디지털 티비 (0) | 2018.10.28 |
백준 3613번 Java vs C++ (0) | 2018.10.28 |