본문 바로가기

백준/문자열

[ICPC] 백준 9081 - 단어 맞추기

728x90
728x90

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

 

주의! 이 문제에는 낚시가 있다! 출력란에 써진 글을 보자.

 

각 테스트 케이스에 대해서 주어진 단어 바로 다음에 나타나는 단어를 한 줄에 하나씩 출력하시오. 만일 주어진 단어가 마지막 단어이라면 그냥 주어진 단어를 출력한다.

 

여기서 말하는 마지막 단어는 입력의 마지막이 아니라 사전순으로 마지막인 단어를 의미한다!

 

C++의 경우 next_permutation()을 할 때 현재 순열이 사전순으로 마지막이라면 false를 반환한다.

 

next_permutation의 결과가 false이면 prev_permutation으로 다시 되돌린 후 출력하면 된다.

 

전체 코드

더보기
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>

using namespace std;

int t;

void solve()
{
  cin >> t;

  while (t--)
  {
    string s;
    cin >> s;

    if (!next_permutation(s.begin(), s.end())) prev_permutation(s.begin(), s.end());
    cout << s << '\n';
  }
}

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

  solve();
}

 

728x90
728x90

'백준 > 문자열' 카테고리의 다른 글

백준 1498 - 주기문  (0) 2022.07.22
[ICPC] 백준 14959 - Slot Machines  (0) 2022.07.20
[ICPC] 백준 10266 - 시계 사진들  (0) 2022.07.15