Algorithm(CodeTree, Python)/완전탐색1
[코드트리 자리 수 단위로 완전탐색] Carry 피하기 2 python
by kurooru
2022. 12. 2.
# n 입력
n = int(input())
# num_list
num_list = []
# num_list 입력
for _ in range(n):
num_list.append(int(input()))
# 함수들
# is_carry(a, b, c)
def is_carry(a, b, c):
# str_a, b, c
str_a = str(num_list[a])
str_b = str(num_list[b])
str_c = str(num_list[c])
# max_len 구하기
max_len = max(len(str_a), len(str_b), len(str_c))
# max_len에 맞춰 형식 변환 ex. "6" -> "0006"
len_diff_a = max_len - len(str_a)
str_a = '0' * len_diff_a + str_a
len_diff_b = max_len - len(str_b)
str_b = '0' * len_diff_b + str_b
len_diff_c = max_len - len(str_c)
str_c = '0' * len_diff_c + str_c
# 자리수별 탐색 시작
for i in range(max_len):
# 한번이라도
# 자릿수 3개를 더해 10이상이 나오면,
if int(str_a[i]) + int(str_b[i]) + int(str_c[i]) >= 10:
# True
return True
# 다 탐색하고 넘지 않았으면 False
return False
# calc(a, b, c)
def calc(a, b, c):
# 세 값을 더한 값 반환
return num_list[a] + num_list[b] + num_list[c]
# 설계
# ans
ans = -1
# 완전 탐색 시작
for i in range(n-2):
for j in range(i+1, n-1):
for k in range(j+1, n):
# carry가 발생하지 않으면,
if not is_carry(i, j, k):
# ans 업데이트
ans = max(ans, calc(i, j, k))
# 출력
print(ans)