[C++][백준 25705] 돌림판 문자열

PublicMinsu·2025년 8월 30일

문제

https://www.acmicpc.net/problem/25705

접근 방법

동작이 정해져있고 동작 대로 실행했을 때 결과물이 나오는지, 결과물의 값은 얼마인지 확인하는 문제입니다.
그렇기에 동작을 구현하면 되는 문제입니다.

코드

#include <iostream>
#include <queue>
using namespace std;

int N, M, cnt;
string S;
queue<char> q;
bool hasChar[26];

int main()
{
    ios::sync_with_stdio(0), cin.tie(0);

    cin >> N;

    for (int i = 0; i < N; ++i)
    {
        char c;
        cin >> c;
        q.push(c);
        hasChar[c - 'a'] = true;
    }

    for (int i = 0; i < N - 1; ++i)
    {
        q.push(q.front());
        q.pop();
    }

    cin >> M >> S;

    for (const char &c : S)
    {
        if (!hasChar[c - 'a'])
        {
            cout << -1;
            return 0;
        }
    }

    for (const char &c : S)
    {
        do
        {
            ++cnt;
            q.push(q.front());
            q.pop();
        } while (q.front() != c);
    }

    cout << cnt;
    return 0;
}

풀이

회전, 문자 추가 또는 보류는 둘 중 하나만 하는 것이 아니라 무조건 둘 다 해야 되는 것입니다.
그렇기에 두 동작이 이루어지게 구현을 해주면 됩니다.

추가로 돌림판에 적혀있는 문자로만 문자열 S가 이루어졌다면 가능한 것이고 아니라면 불가능한 것입니다.

profile
연락 : publicminsu@naver.com

0개의 댓글