티스토리 뷰

문제

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

풀이과정

1부터 N까지의 수로 이루어진 순열이 주어지면 사전순으로 다음에 오는 순열을 구하는 문제이다. 이러한 문제들을 보면 항상 내 머리로는 셀 수 있는데 코딩을 할 수가 없어서 자괴감이 들었던 것 같다.

찾아보니 C++ 에 정말 편리한 함수가 존재했다.
next_permutation(v.begin(),v.end()) 는 v라는 벡터의 처음과 끝을 주면 다음 순열이 존재할 경우 true를 리턴하고 벡터의 원소들을 다음 순열로 만들어준다.
꼭 벡터가 아니여도 배열의 처음과 끝을 줘도 된다.

이러한 함수를 내가 구현해봐야 좋겠지만 일단은 사용법만 알아두고 응용하는 법만 알아둬야겠다.

반대로 prev_permutation도 있다.

소스코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define MAX_N 10000

int arr[MAX_N];

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

    int N;

    cin >> N;

    for (int i = 0; i < N; i++) cin >> arr[i];

    if (next_permutation(arr, arr + N))
    {
        for (int i = 0; i < N; i++) cout << arr[i] << " ";
    }
    else cout << "-1\n";

    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1722번 순열의 순서  (0) 2018.03.05
[백준] 10974번 모든 순열  (0) 2018.03.04
[백준] 6603번 로또  (0) 2018.03.04
[백준] 1517번 버블 소트  (0) 2018.02.19
[백준] 1891번 사분면  (0) 2018.02.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함