본문 바로가기

Programming/백트래킹

Baekjoon / Back Tracking / 좋은 수열

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

 

2661번: 좋은수열

첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다.

www.acmicpc.net

 

Solution

def back_tracking(idx):
    print('idx :', idx)
    for i in range(1, (idx//2) + 1):
        print(i)
        if s[-i:] == s[-2*i:-i]:
            print('back')
            return -1

    if idx == n:
        for i in range(n):
            print(s[i], end = '')
        return 0

    for i in range(1, 4):
        s.append(i)
        print(s)
        if back_tracking(idx+1) == 0:
            return 0
        s.pop()

if __name__ == "__main__":
    n = int(input())
    s = []
    back_tracking(0)

 

실행 결과 로그

idx : 0
[1]
idx : 1
[1, 1]
idx : 2
1
back
[1, 2]
idx : 2
1
[1, 2, 1]
idx : 3
1
[1, 2, 1, 1]
idx : 4
1
back
[1, 2, 1, 2]
idx : 4
1
2
back
[1, 2, 1, 3]
idx : 4
1
2
[1, 2, 1, 3, 1]
idx : 5
1
2
[1, 2, 1, 3, 1, 1]
idx : 6
1
back
[1, 2, 1, 3, 1, 2]
idx : 6
1
2
3
[1, 2, 1, 3, 1, 2, 1]
idx : 7
1
2
3
1213121

 

'Programming > 백트래킹' 카테고리의 다른 글

Baekjoon / 감소하는 수  (0) 2022.04.04
Baekjoon / 암호 만들기  (0) 2022.03.05