YoonWould!!

[백트래킹]2661번 좋은수열 본문

<SW>/알고리즘 + 자료구조

[백트래킹]2661번 좋은수열

Hading 2018. 9. 26. 18:45
728x90

URL : https://www.acmicpc.net/problem/2661



백트래킹 문제 어떻게 풀지?


1. 1,2,3 을 더해가며 좋은 수열인지 아닌지 판별한다고 했을 때 - dfs와 백트래킹 문제 직감
2. 종료 조건 - 좋은 순열 찾았을 때, 나쁜 순열일 경우, 길이가 n일 경우 출력

참고

c++에서 s.substr(a, b) 는 s문자열을 시작점 a에서부터 b개의 문자를 자르는 것



※필요 역량 정리하기!!!※

1. dfs + 백트래킹

2. #include<string>에서 사용하는 함수 정리하기



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
46
/*
2661 좋은 수열
백트래킹 문제
*/
 
#include<iostream>
#include<algorithm>
#include<string>
 
using namespace std;
 
int n;
bool finish;
 
bool check(string s) {
    int len = s.length();
    int start = len - 1;
    for (int i = 1; i <= len / 2; i++) {
        string first = s.substr(start - i, i);
        string second = s.substr(start, i);
        if (first.compare(second) == 0return false;
        start--;
    }
    return true;
}
 
void dfs(int len ,string s) {
    if (finish) return;
    if (!check(s)) return;
    if (len == n) {
        finish = true;
        cout << s << endl;
        return;
    }
    dfs(len + 1, s + "1");
    dfs(len + 1, s + "2");
    dfs(len + 1, s + "3");
}
 
int main() {
    cin >> n;
    dfs(1,"1");
    return 0;
}
cs


728x90