📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 좋은수열 2661 문제 풀이

Written by Donghak Park

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

 

2661번: 좋은수열

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

www.acmicpc.net


문제 해석 : 좋은 수열이란 수열 중 어느 수열도 인접한 수열이 같지 않다는 것이다.

 

문제 풀이 : 재귀함수를 이용해서 풀이할 수 있다.

 

풀이 시간 (기록용) : 30분

 


풀이 코드

import sys


def check(s):
    for i in range(1, (len(s) // 2) + 1):
        leng = i
        start = 0
        start2 = start + i
        for j in range(len(s) - (leng * 2) + 1):
            if s[start + j:start + j + leng] == s[start2 + j:start2 + j + leng]:
                return False
    return True


def make_num(number, N):
    if check(number) is False:
        return
    if len(number) == N:
        print(number)
        sys.exit()

    else:
        for j in range(1, 4):
            make_num(number + str(j), N)


N = int(input())
make_num('1', N)

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.