728x90
반응형
Python
import sys
arr = []
visit = []
n=0
result = [[]]
def back(k):
global visit
if k>=6:
temp = [ y for y in visit if y!='']
# in 키워드는 앞에서부터 탐색
# 뒤에서부터 탐색하여 시간 단축
for i in range(len(result)-1,-1,-1):
if temp == result[i]:
return
print(' '.join(temp))
result.append(temp)
return
for i in range(k,(n)):
# 해당 원소를 사용한 적이 있다면 패스
if arr[i] == visit[i]:
continue
visit[i] = arr[i]
back(k+1)
visit[i] = ''
while True:
x = sys.stdin.readline().rstrip()
if x == '0':
break
arr = x.split()
n = int(arr[0])
visit = ['']*n
arr = arr[1:]
back(0)
print()
짧은 풀이
백트래킹에서 중복 여부를 검사할 때 전체 리스트를 살펴보는 것이 아니라
visit 리스트에 해당 원소가 표시되어있는지 확인함으로써 O(1)로 시간 단축
728x90
반응형
'Algorithm Problems' 카테고리의 다른 글
[백준] [Python] 1463번 1로 만들기 - DP (0) | 2021.05.13 |
---|---|
[백준] [Python] 1759번 암호 만들기 - 백트래킹 (0) | 2021.05.12 |
[백준] [Python] 2468번 안전지대 - BFS (0) | 2021.05.11 |
[백준] [Python] 7562번 나이트의 이동 - BFS (0) | 2021.05.11 |
[백준] [USACO-Bronze] [Python] 적록색약 - BFS (0) | 2021.05.11 |