Koala - 11기/코딩테스트 준비 스터디

[백준/Python] 2661 좋은수열

긍살:D 2023. 7. 16. 21:32

문제링크

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

 

2661번: 좋은수열

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

www.acmicpc.net


코드

import sys
n = int(input())
result = []
def isgood(arr):
    for i in range(1,len(arr)//2+1):
        if arr[-i:]==arr[-i*2:-i]:return False
    return True
            
def dfs():
    global result
    if len(result)==n:
        print(''.join(map(str,result)))
        sys.exit()
    for i in range(1,4):
        result.append(i)
        if isgood(result):
            dfs()
            result.pop()
        else:
            result.pop()
dfs()

문제풀이

1,2,3 순서대로 result 리스트에 넣어주며 좋은 수열일 경우에 dfs를 돌린다.

check() 함수를 정의하여 좋은 수열을 판별한다.

result길이가 n자리가 되면 출력한다. ( 1,2,3 순서로 추가하기 떄문에 가장 작은 수를 만족한다.)