아이디어 🤩
몇 자리 숫자가 들어오는지에 따라서 다른 행동을 하라고 했다.
그래서 숫자(단, str 형식으로 입력받음)와 그때까지 더한 홀수의 합을 받아서, 특정한 행동을 하는 함수를 만들었다. 몇 자리인지에 따라서 다른 행동을 하고, 한 자리가 되어서 종료될 때까지 재귀로 계속 돌린다.
- 한 자리 -> 그때까지의 홀수의 개수를 리스트에 추가하고 리턴! (나중에 최대 홀수의 개수, 최소 홀수의 개수를 출력한다.)
- 두 자리 -> 그 수를 두 개로 나눠서 합을 구해서 새로운 수로 생각한다. (12면 1과 2로 나눈다. -> 1+2를 해서 3을 새로운 수로 생각하기)
=> 새로운 수, 그때까지 홀수의 합 + 이 새로운 수에 들어간 홀수의 개수를 인자로 주어서, 또 함수에 넣는다. - 세 자리 이상 -> 임의의 위치에서 끊어서 세 개의 수로 나눈다. 합을 구해서 새로운 수로 생각한다. 이 임의의 위치는 일일이 다 따져보았다.
예를 들어서 12345이면..
1) 1 2 345 => 각 수를 더하면 348
2) 1 23 45 => 각 수를 더하면 69
3) 1 234 5 => 각 수를 더하면 240
4) 12 3 45 => 각 수를 더하면 60
5) 12 34 5 => 각 수를 더하면 51
6) 123 4 5 => 각 수를 더하면 132를 새로운 수로 생각할 수 있다.
=> 새로운 수, 그때까지 홀수의 합 + 이 새로운 수에 들어간 홀수의 개수를 인자로 주어서, 또 함수에 넣는다.
코드 👩💻
def new_num_sum(num:int):
"""
숫자의 각 자리수에서 홀수의 개수를 리턴한다
"""
new_num_total = 0
while num:
if (num % 10) % 2: # 홀수이면
new_num_total += 1
num//=10
return new_num_total
def sol(n: str, total: int): # 지금 수, 지금까지 홀수의 개수
if len(n) == 1: # 수가 한 자리이면 종료
makes.append(total) # 그때까지의 홀수의 개수를 리스트에 추가
return
elif len(n) == 2: # 수가 두 자리이면
new_num = int(n[0]) + int(n[1]) # 2개로 나누고, 더해서 새로운 수로 생각하기
sol(str(new_num), total + new_num_sum(new_num))
else: # 수가 세 자리 이상이면
for i in range(1, len(n)): # 자를 위치 2개
for j in range(i+1, len(n)):
part1 = n[:i]
part2 = n[i:j]
part3 = n[j:]
new_num = int(part1) + int(part2) + int(part3) # 3개의 수로 나누고, 더해서 새로운 수로 생각하기
sol(str(new_num), total + new_num_sum(new_num))
N = input()
makes =[]
sol(N, new_num_sum(int(N)))
print(min(makes), max(makes))
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 22252: 정보 상인 호석 (0) | 2021.10.08 |
---|---|
[백준-파이썬] 1463: 1로 만들기 (0) | 2021.10.08 |
[백준-파이썬] 11067: 모노톤길 (0) | 2021.10.08 |
[백준-파이썬] 14267: 회사 문화1 (0) | 2021.10.08 |
[백준-파이썬] 2174: 로봇 시뮬레이션 (0) | 2021.10.08 |