[백준 2992] 크면서 작은 수 (다음 순열 찾기 & next_permutation사용법)

2021. 7. 9. 13:10·PS/알고리즘

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

 

2992번: 크면서 작은 수

정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이

www.acmicpc.net

bool next_permutation

동작 : 사전식 순서로 다음 순열 찾는것

> 매소드 형태: 
    bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);

> 시간 복잡도 : O(N!)

> 사용법 : 한번 저거 사용하면 정렬시키고 적용;

> 매개변수 : 
    first.iterator
    last.iterator

> 리턴형 :
    다음 순열이 있다면 true 리턴
    없다면 false 리턴

//prev_permutation도 있단다!.

그래서 이문제는 어떻게 해결하는건가 하면---

 

'다음 순열이 존재하는가?'이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
int main() {
    string str; cin >> str;
    if (next_permutation(str.begin(), str.end()))
        cout << str << '\n';
    else
        cout << 0 << '\n';
}
Colored by Color Scripter
cs

 


그런데.. 억울한 점이 있다.

위와 같은 논리로 구현했는데 틀렸다고 하니.. 어떤게 잘못된건지 반례 찾아봐야 할듯

 

위와 같은 논리로 구현했는데. 틀렸다고 했다.. 어떤게 잘못된건지 반례를 찾아봐야 할것같다

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
 
int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL);
    string str; cin >> str;
    string subStr = "";
    for (int i = str.size() - 1; i >= 0; i--)
    {
        subStr = str.substr(i, str.size());
        string maxSubStr = subStr; sort(maxSubStr.begin(), maxSubStr.end(), greater<char>());
        if (maxSubStr != subStr)
        {
            int nextIdx = 1;
            while (subStr[0] < subStr[nextIdx]) {
                nextIdx++;
            }
            int cnt = nextIdx - 1;
            while (subStr[cnt] == subStr[nextIdx - 1]) {
                nextIdx--;
            }
            vector<char> bufStr(subStr.begin(), subStr.end());
 
            char temp = bufStr[nextIdx];
            bufStr[nextIdx] = bufStr[0];
            bufStr[0] = temp;
            sort(bufStr.begin() + nextIdx, bufStr.end());
 
            for (int j = str.size() - 1; j >= i; j--) {
                str[j] = bufStr.back();
                bufStr.pop_back();
            }
            cout << str << '\n';
            return 0;
        }
    }
    cout << 0 << '\n';
    return 0;
}
Colored by Color Scripter
cs

 

저작자표시 (새창열림)

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

[프로그래머스 2019 KAKAO BLIND RECRUITMENT] (level2) 오픈채팅방  (0) 2024.12.20
| 알고리즘 | 3 | 그래프-1 | Stack : DFS | 미로찾기 |  (0) 2022.03.13
[프로그래머스 그래프 탐색 DFS/BFS] (level 3) 3번 단어 변환  (0) 2021.07.08
[백준 1543번] 문서 검색 (c++ <string> 레퍼런스 )  (0) 2021.07.05
[백준 11719번] 그대로 출력하기 2 (<string> Getline 문자열 공백 허용 입력)  (0) 2021.07.05
'PS/알고리즘' 카테고리의 다른 글
  • [프로그래머스 2019 KAKAO BLIND RECRUITMENT] (level2) 오픈채팅방
  • | 알고리즘 | 3 | 그래프-1 | Stack : DFS | 미로찾기 |
  • [프로그래머스 그래프 탐색 DFS/BFS] (level 3) 3번 단어 변환
  • [백준 1543번] 문서 검색 (c++ <string> 레퍼런스 )
니앙팽이
니앙팽이
  • 니앙팽이
    니앙팽이 블로그
    니앙팽이
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • 그림그리기 (7)
      • 음악 (4)
        • FL Studio & MIDI (2)
        • 자작곡 (2)
      • 게임 (7)
        • 모바일 (0)
        • 스팀 (0)
        • 닌텐도 (0)
        • 개발 (7)
      • CS (44)
        • SW 공학 (27)
        • DB (7)
        • OS (9)
        • 네트워크 (1)
      • 팁 (9)
      • Language (21)
        • C# (8)
        • C&C++ (3)
        • 파이썬 메모 (3)
        • Javascript (7)
      • PS (0)
        • 알고리즘 (24)
        • 자료구조 (8)
        • 수학 (1)
        • 선형대수 (0)
        • 오토마타 (1)
        • 이산수학 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체지향개발
    클립 스튜디오
    그림 연습
    프로세스
    c#
    노마드 코더
    유니티
    unity
    KAKAO
    파이썬
    Stack
    알고리즘
    디자인패턴
    자료구조
    따라그리기
    연결리스트
    clip studio paint
    Javascript
    프로그래머스
    가비지 콜렉터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
니앙팽이
[백준 2992] 크면서 작은 수 (다음 순열 찾기 & next_permutation사용법)
상단으로

티스토리툴바