일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dfs
- object detection
- 세그먼트 트리
- DP
- 크루스칼
- back propagation
- lazy propagation
- 조합론
- 문자열
- 우선 순위 큐
- 2023
- 회고록
- 알고리즘
- Overfitting
- 가끔은_말로
- BFS
- 자바스크립트
- tensorflow
- 다익스트라
- 분할 정복
- pytorch
- 미래는_현재와_과거로
- dropout
- 이분 탐색
- 가끔은 말로
- 백트래킹
- 플로이드 와샬
- c++
- NEXT
- 너비 우선 탐색
Archives
- Today
- Total
Doby's Lab
백준 2992번: 크면서 작은 수 (C++) 본문
https://www.acmicpc.net/problem/2992
2992번: 크면서 작은 수
정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이
www.acmicpc.net
Solved By: Back Tracking, String to Int (stoi)
가능한 경우의 수를 찾기 위해 백트래킹을 사용하였습니다. 문자열 비교가 되지 않길래 stoi 함수를 통해 정수형으로 변환하여 compare 하여 문제에서 요구하는 s보다 크면서 제일 작은 수를 찾을 수 있었습니다.
#include <iostream>
#include <string>
using namespace std;
string s;
int ans = 1000000;
bool visited[7];
void backTracking(string temp, int cnt){
if(cnt == s.size()){
if(temp > s){
int tempInt = stoi(temp);
ans = tempInt < ans ? tempInt : ans;
}
return;
}
for(int i = 0; i < s.size(); i++){
if(!visited[i]){
visited[i] = true;
backTracking(temp + s[i], cnt + 1);
visited[i] = false;
}
}
}
int main(){
cin >> s;
backTracking("", 0);
if(ans == 1000000) cout << 0;
else cout << ans;
return 0;
}
'PS > BOJ' 카테고리의 다른 글
백준 6850번: Cows (C++) (0) | 2022.04.17 |
---|---|
백준 10903번: Wall construction (C++) (0) | 2022.04.16 |
백준 1940번: 주몽 (C++) (0) | 2022.04.11 |
백준 2191번: 들쥐의 탈출 (C++) (0) | 2022.03.19 |
백준 2188번: 축사 배정 (C++) (0) | 2022.03.19 |