반응형
backtracking문제였습니다.
풀이방법
1. 1,2,3중에 중복가능하게 i개를 골라 식을 만들었을 때 num과 같다면 vector 변수 ans에 넣어줍니다.
2. 매번 3개의 분기로 호출이 되므로 시간복잡도는 i * 3^i 가 됩니다.
Code
#include <bits/stdc++.h>
using namespace std;
int n,k;
vector <string> ans;
void backtracking(int idx,int m,int num,string op){
if(idx == m){
if (num == n) ans.push_back(op.substr(1,op.size()-1));
return;
}
backtracking(idx + 1, m, num + 1, op + "+1");
backtracking(idx + 1, m, num + 2, op + "+2");
backtracking(idx + 1, m, num + 3, op + "+3");
}
int main(){
cin >> n >> k;
for(int i = 1; i <= n; i++) backtracking(0,i,0,"");
sort(ans.begin(),ans.end());
if(ans.size() >= k) cout << ans[k-1];
else cout << "-1";
}
'Algorithm > DFS' 카테고리의 다른 글
(Javascript) - 프로그래머스(고득점 kit : 동적계획법) : N으로 표현 (0) | 2021.05.06 |
---|---|
(C++) - 프로그래머스(월간 코드 챌린지 시즌2) : 모두 0으로 만들기 (0) | 2021.04.21 |
(C++) - 백준(BOJ) 13023번 : ABCDE (0) | 2021.04.19 |
(C++) - 프로그래머스(2021 KAKAO BLIND RECRUITMENT) : 메뉴 리뉴얼 (0) | 2021.04.07 |
(C++) - 백준(BOJ) 17609번 : 회문 (0) | 2021.03.14 |