답은 알고리즘 뿐이야!

[BOJ 2661] 좋은수열 본문

알고리즘/백준문제풀이

[BOJ 2661] 좋은수열

skyde47 2019. 12. 26. 14:45

문제 출처 : https://www.acmicpc.net/problem/2661

 

풀이 :

 

백트래킹 문제입니다.

1,2,3 중 하나의 수로 들어가는데 들어가기전에 맨 뒤에서 부터 한개씩 두개씩 ~ 확장하면서 같은 부분 수열이 있는지 유망성 검사를 해주고 들어가시면 됩니다.

 

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
#include<stdio.h>
 
int n,arr[81],type;
 
bool backtracking(int itr)
{
    if (itr > n)return true;
    for (int i = 1; i < 4; i++) {
        arr[itr] = i;
        for (int j = 12 * j <= itr; j++) {
            type = 0;
            for (int k = 0; k < j; k++) {
                int c = itr;
                if (arr[c - k] != arr[c - j - k])break;
                if (k == j - 1)type = 1;
            }
            if (type)break;
        }
        if (type)continue;
        if(backtracking(itr + 1))return true;
    }
    return false;
}
 
int main() {
    scanf("%d"&n);
    backtracking(1);
    for (int i = 1; i <= n; i++)printf("%d", arr[i]);
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'알고리즘 > 백준문제풀이' 카테고리의 다른 글

[BOJ 7453] 합이 0인 네 정수  (0) 2020.01.02
[BOJ 1644] 소수의 연속합  (0) 2019.12.26
[BOJ 1932] 정수 삼각형  (0) 2019.12.08
[BOJ 2644] 촌수계산  (0) 2019.12.08
[BOJ 8902] 색상의 길이  (0) 2019.11.25
Comments