본문 바로가기
알고리즘 문제풀이/백준

백준 2661

by Hoseok 2023. 4. 1.
728x90
반응형

 

def is_good_sequence(seq):
    n = len(seq)
    for i in range(1, n//2+1):
        if seq[-i:] == seq[-2*i:-i]:
            return False
    return True

def generate_good_sequence(n, seq):
    if not is_good_sequence(seq):
        return
    if len(seq) == n:
        print(''.join(str(x) for x in seq))
        exit()
    for i in range(1, 4):
        seq.append(i)
        generate_good_sequence(n, seq)
        seq.pop()

n = int(input())
generate_good_sequence(n, [])

 

코드 리뷰


1. def is_good_sequence(seq) 함수: 인자로 받은 수열 seq가 좋은 수열인지 판별하는 함수. 좋은 수열이 아닐 경우 False를 반환하고, 그 외의 경우 True를 반환.

    ● n = len(seq): seq의 길이를 구한다.
    ● for i in range(1, n//2+1): 1부터 n//2까지 반복.
    ● if seq[-i:] == seq[-2*i:-i]: seq의 마지막 i개 요소와 그 이전의 i개 요소가 같으면 좋은 수열이 아니므로 False를 반환.
    ● return True: seq가 좋은 수열이므로 True를 반환.


2. def generate_good_sequence(n, seq) 함수: 길이가 n인 좋은 수열 중에서 가장 작은 수열을 생성하는 함수.

    ● if not is_good_sequence(seq): return: 인자로 받은 seq가 좋은 수열이 아니면 반환.
    ● if len(seq) == n: print(''.join(str(x) for x in seq)); exit(): seq가 길이 n인 좋은 수열이면, 해당 수열을 출력하고 종료.
    ● for i in range(1, 4): 1, 2, 3을 순서대로 대입해보면서 반복.
    ● seq.append(i): seq의 끝에 i를 추가.
    ● generate_good_sequence(n, seq): seq에 i를 추가한 후, 재귀적으로 generate_good_sequence() 함수를 호출.
    ● seq.pop(): generate_good_sequence() 함수가 끝나면, seq에서 마지막 요소를 제거.

 

3. n = int(input()): 입력으로부터 길이 n을 정수형으로 받는다.

4. generate_good_sequence(n, []): generate_good_sequence() 함수에 길이 n과 빈 리스트를 인자로 전달하여 실행.

728x90
반응형

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

백준 2667  (0) 2023.04.05
백준 14888  (0) 2023.04.04
백준 14889  (0) 2023.04.01
백준 2798  (0) 2023.03.31
백준 10819  (0) 2023.03.31