[C++] next_permutation, prev_permutation

2020. 5. 1. 16:19Β·πŸ“ Computer Science/✏ Algorithm

next_permutation, prev_permutation

ν•¨μˆ˜μ— λ²‘ν„°μ˜ iteratorλ‚˜ λ°°μ—΄μ˜ μ£Όμ†Œλ₯Ό λ„£μœΌλ©΄ λ‹€μŒ μˆœμ—΄(next_permutation) λ˜λŠ” 이전 μˆœμ—΄(prev_permutation)의 κ²°κ³Όκ°€ λ²‘ν„°λ‚˜ 배열에 μ μš©λœλ‹€. λ§Œμ•½ λ‹€μŒ λ˜λŠ” 이전 μˆœμ—΄μ΄ μ—†λ‹€λ©΄ Falseλ₯Ό return ν•œλ‹€.

 

문제

 

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

 

10972번: λ‹€μŒ μˆœμ—΄

첫째 μ€„에 μž…λ ₯으둜 μ£Όμ–΄μ§„ μˆœμ—΄μ˜ λ‹€μŒμ— μ˜€λŠ” μˆœμ—΄μ„ 좜λ ₯ν•œλ‹€. λ§Œμ•½, μ‚¬μ „μˆœμœΌλ‘œ λ§ˆμ§€λ§‰μ— μ˜€λŠ” μˆœμ—΄μΈ κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

www.acmicpc.net

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

int num[10000];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i)
		cin >> num[i];

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

 

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

 

10973번: 이전 μˆœμ—΄

첫째 μ€„에 μž…λ ₯으둜 μ£Όμ–΄μ§„ μˆœμ—΄μ˜ 이전에 μ˜€λŠ” μˆœμ—΄μ„ 좜λ ₯ν•œλ‹€. λ§Œμ•½, μ‚¬μ „μˆœμœΌλ‘œ κ°€μž₯ μ²˜μŒμ— μ˜€λŠ” μˆœμ—΄μΈ κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

www.acmicpc.net

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

int num[10000];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i)
		cin >> num[i];

	if (prev_permutation(num, num + n))
		for (int i = 0; i < n; ++i)
			cout << num[i] << " ";
	else
		cout << -1;
}

 

https://leetcode.com/problems/next-permutation/

 

Next Permutation - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    void nextPermutation(vector<int>& nums)
    {
        // 참고둜, μ œκ³΅ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆλ‹€.
        //next_permutation(nums.begin(), nums.end());

        // λ’€μ—μ„œλΆ€ν„° 정렬이 κΉ¨μ§€λŠ” 인덱슀 μ°ΎκΈ°
        int i = nums.size() - 2;
        while (i >= 0 && nums[i] >= nums[i + 1])
            --i;

        if (i == -1) {
            reverse(nums.begin(), nums.end());
        }
        else {
            // 정렬이 κΉ¨μ§€λŠ” 인덱슀 κ΅ν™˜
            int j = i + 1;
            while (j < nums.size() && nums[i] < nums[j])
                j++;
            swap(nums[i], nums[j - 1]);
            reverse(nums.begin() + i + 1, nums.end());
        }
    }
};
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Computer Science/✏ Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C++] μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(Union-Find)
  • [C++] 투 포인터(Two Pointer)
  • [C++] λΉ„νŠΈ μ—°μ‚°μž
  • [C++] μ΅œλ‹¨ 경둜(λ‹€μ΅μŠ€νŠΈλΌ, ν”Œλ‘œμ΄λ“œ 와샬, 벨만 ν¬λ“œ)
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C++] next_permutation, prev_permutation
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”