알고리즘
[백준/파이썬] #20164
룰루루
2025. 3. 14. 22:31
30분 안에 풀지는 못했지만 이전에 시도한 풀이를 가져와봤다.
from itertools import combinations
original_number = input()
def count_odd_numbers(number: str):
odd_count = 0
for num in number:
if int(num) % 2 == 1:
odd_count += 1
if len(number) == 1:
return odd_count, odd_count
elif len(number) == 2:
new_number = int(number[0]) + int(number[1])
max_count, min_count = count_odd_numbers(str(new_number))
return max_count + odd_count, min_count + odd_count
else:
max_count, min_count = 0, 0
number_indexes = ''.join([str(i) for i in range(len(number))])
number_cases = combinations(number_indexes, 3)
for number_case in number_cases:
start1, start2, start3 = int(number_case[0]), int(number_case[1]), int(number_case[2])
number1 = int(''.join(number[start1:start2]))
number2 = int(''.join(number[start2:start3]))
number3 = int(''.join(number[start3:]))
new_number = number1 + number2 + number3
current_max_count, current_min_count = count_odd_numbers(str(new_number))
max_count = max(current_max_count, max_count)
min_count = min(current_min_count, min_count)
return max_count + odd_count, min_count + odd_count
max_value, min_value = count_odd_numbers(original_number)
print(f"{min_value} {max_value}")
다른 풀이를 참고하니 재귀나 itertools 라이브러리로 경우의 수를 구해서 접근하는 방식은 비슷했던 것 같다. 다만 함수를 호출하거나 리턴값을 받는 방식이 달랐는데, 이 부분 때문에 결과가 제대로 계산 또는 반영되지 않은 것일 수 있겠다.
from itertools import combinations
original_number = input()
max_value = -1e5
min_value = 1e5
def count_odd_numbers(number: str):
odd_count = 0
for num in number:
if int(num) % 2 == 1:
odd_count += 1
return odd_count
def solution(number: str, odd_count: int):
global max_value, min_value
if len(number) == 1:
max_value = max(max_value, odd_count)
min_value = min(min_value, odd_count)
elif len(number) == 2:
new_number = str(int(number[0]) + int(number[1]))
solution(new_number, odd_count + count_odd_numbers(new_number))
else:
number_indexes = ''.join([str(i) for i in range(len(number))])
number_cases = combinations(number_indexes, 3)
for number_case in number_cases:
start1, start2, start3 = int(number_case[0]), int(number_case[1]), int(number_case[2])
number1 = int(''.join(number[start1:start2]))
number2 = int(''.join(number[start2:start3]))
number3 = int(''.join(number[start3:]))
new_number = str(number1 + number2 + number3)
solution(new_number, odd_count + count_odd_numbers(new_number))
solution(original_number, count_odd_numbers(original_number))
print(f"{min_value} {max_value}")