본문 바로가기
Study (etc)/Problem Solving

[BOJ / C++] 16923번 : 다음 다양한 단어

by Haren 2023. 5. 8.

문제

다양한 단어란 모두 다른 알파벳 소문자로만 이루어진 단어를 의미한다. 예를 들어, "codeplus", "coding", "algorithm"은 다양한 단어, "baekjoon", "startlink"는 다양한 단어가 아니다.

다양한 단어 S가 주어졌을 때, 사전 순으로 S의 바로 다음에 오는 다양한 단어를 구해보자.

입력

첫째 줄에 길이가 26보다 작거나 같은 다양한 단어 S가 주어진다.

출력

사전 순으로 S의 바로 다음에 오는 다양한 단어를 출력한다. 바로 다음에 오는 단어가 없는 경우에는 -1을 출력한다.

Solved.ac 레벨

실버 I

풀이

#include <bits/stdc++.h>

using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string s;
    int alphabet[26];
    char tmp[26];

    memset(alphabet, -1, sizeof(alphabet));
    cin >> s;

    int len = s.length();

    for(int i = 0; i < len; i++) {
        tmp[i] = s[i];
        alphabet[s[i] - 'a'] = i;
    }

    if(len == 26) {
        if(next_permutation(tmp, tmp + 27)) {
            cout << tmp << "\n";
        } else {
            cout << -1 << "\n";
        }
    } else {
        for(int i = 0; i < 26; i++) {
            if(alphabet[i] == -1) {
                s += i + 'a';
                cout << s << endl;
                break;
            }
        }
    }


    return 0;
}

그냥 문자열에서 아직 나오지 않은 가장 앞의 알파벳을 붙여주기만 하면 된다고 생각했는데 알파벳 26개가 모두 쓰인 문자열도 입력으로 들어온다는 것을 간과해서 하루종일 잡고 있었던 문제였다.. (머리가 나쁘면 몸이 고생한다.)

다른 분들의 풀이를 참고하였더니 next_permutation이라는 함수를 새로 알게되어 활용해보았다.

 

 

16923번: 다음 다양한 단어

다양한 단어란 모두 다른 알파벳 소문자로만 이루어진 단어를 의미한다. 예를 들어, "codeplus", "coding", "algorithm"은 다양한 단어, "baekjoon", "startlink"는 다양한 단어가 아니다. 다양한 단어 S가 주어졌

www.acmicpc.net