알고리즘 스터디
[백준] 2661번 : 좋은 수열 - Python(파이썬)
히치키치
2021. 5. 11. 01:58
문제
2661번: 좋은수열
첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다.
www.acmicpc.net
풀이
- 백트래킹 + BFS
- 가장 작은 수를 나타내는 수열 : 1,2,3 순으로 비교 진행
- 부분 수열 check 범위 : 전체 수열 길이의 절반
코드
#https://www.acmicpc.net/problem/2661
def back_tracking(idx):
for i in range(1, (idx//2) + 1):
if s[-i:] == s[-2*i:-i]: #나쁜 순열인 경우
return -1
if idx == n: #백트래킹의 깊이 = n
for i in range(n): #출력
print(s[i], end = '')
return 0
for i in range(1, 4): #후보가 되는 문자열 만들기
s.append(i)
if back_tracking(idx + 1) == 0:
return 0
s.pop()
n = int(input())
s = []
back_tracking(0)