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과 빈 리스트를 인자로 전달하여 실행.