Algorithm(CodeTree, Python)/완전탐색3
[코드트리 기준을 새로 설정하여 완전탐색] 초기 수열 복원하기 Python
kurooru
2023. 1. 7. 11:58
상황에 따라 수열의 길이가 바뀌는 것을
어떻게 처리해줘야할지 고민하게 되었다.
recursion을 사용하지 않고 최대한 완전탐색답게 풀어보려 하였으나
quit() 함수를 사용하여 문제를 해결하였을 때의 이 찜찜함이란,,
# n 입력
n = int(input())
# sum_list
sum_list = list(map(int, input().split()))
# 함수들
# is_duplicated(curr_num_list)
def is_duplicated(curr_num_list):
# 전수 검사
for i in range(n):
# curr_num => 현재 기준이 되는 수
curr_num = curr_num_list[i]
for j in range(n):
# 자기 자신이면
if i == j:
# pass
continue
# 자기 자신 외에 같은 수를 발견하면
if curr_num_list[j] == curr_num:
# 겹칩
return True
# 다 통과하면 안겹침
return False
# only_plus(curr_num_list)
def only_plus(curr_num_list):
# curr_num_list에서
for num in curr_num_list:
# 한개라도 0 이하가 있으면
if num <= 0:
# 실패
return False
# 다 통과하면 성공
return True
# print_ans(curr_num_list)
def print_ans(curr_num_list):
for num in curr_num_list:
print(num, end=' ')
# 설계
for i in range(n):
# curr_num_list
curr_num_list = [
0 for _ in range(n)
]
# 첫 항 넣어주기
curr_num_list[0] = i + 1
# 둘째항부터 마지막 항까지 채워주기
for j in range(1, n):
curr_num_list[j] = sum_list[j-1] - curr_num_list[j-1]
# 겹치지 않고, 0이나 음수가 없으면
if not is_duplicated(curr_num_list) and only_plus(curr_num_list):
# 정답 출력
print_ans(curr_num_list)
# 프로그램 종료
quit()