1. 풀이방법
- 구현자체는 어렵지 않습니다..
- 배열은 ?로 초기화 해주고
- 조건에 따라 INDEX를 취향 껏 조절하시면 됩니다. (방향에 맞춰)
2. 주의사항
- 많이 틀린 이유......예외사항이 중요합니다....
- (1) 같은 문자가 바퀴에 중복으로 붙여져서는 안된다.
- (2) 한 자리에 여러개의 문자가 붙여질 수는 없다.
- 이 떄는 !를 출력해야합니다.
- !!!!! 단, 입력은 돌리면서 상황을 보여주는 것이기 때문에 돌렸을 때 상황이 같은 자리를 가리킬 수도 있기 때문에
- 입력으로 같은 문자가 두번이 들어와도 그것이 같은자리를 가리키고 있는 경우에는 허용이 됩니다...!!
- 이를 조건문에 추가로 걸어주어야 합니다 !
- 너무 쉽다생각했다가 예외처리에서 애좀 먹은 문제입니다...ㅠ
3. 나의코드
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N, K;
void setpan(vector<char> &pan) {
for (int i = 0; i < N; i++) {
pan[i] = '?';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> N >> K;
vector<char> pan(N);
setpan(pan);
int index;
for (int i = 0; i < K; i++) {
int count; char tmpc;
cin >> count >> tmpc;
if (i == 0) { pan[0] = tmpc; index = 0; continue; }
index = (count + index) % N;
//돌렸을 때 같은문자(같은 자리)는 나올 수 있다. 그것마저 아니면 틀린 원판
if (pan[index] != '?'&& pan[index] != tmpc) { cout << "!"; return 0; }
else {
pan[index] = tmpc;
}
}
//중복체크
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
if(pan[i]!='?' &&pan[i]==pan[j]) { cout << "!"; return 0; }
}
}
for (int i = 0; i < N; i++) {
cout << pan[index];
index--;
if (index == -1) index = N - 1;
}
return 0;
}
'알고리즘 문제풀이 > 구현' 카테고리의 다른 글
백준 14503 [C++] (0) | 2020.12.08 |
---|---|
백준 14891 [C++] (0) | 2020.12.06 |
백준 2033 C++ (0) | 2020.11.25 |
백준 14890 [C++] (0) | 2020.10.21 |
백준 17406 [C++] (0) | 2020.10.18 |