본문 바로가기
백준 문풀

백준 2840

by 기록을안하면바보 2024. 5. 8.

행운의 바퀴

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,'?');메소드를 이용해주었다.

 

 

'백준 문풀' 카테고리의 다른 글

백준 11047  (0) 2024.05.15
백준 11866  (0) 2024.05.08
백준 1764  (0) 2024.05.06
백준 11478  (0) 2024.05.06
백준 11279  (0) 2024.05.06