알고리즘/BOJ

백준 2840번 행운의 바퀴

꾸준함. 2018. 10. 29. 01:26

문제 링크입니다: 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