[BOJ] 20164

Seon_shine·2022년 1월 2일
0

python

목록 보기
4/7
import sys
sys.stdin.readline
sys.setrecursionlimit(10**6)
from itertools import combinations
num=input()

def oddcheck(n):
    cnt=0
    for i in n:
        if int(i)%2==1:
            cnt+=1
    return cnt # n이라는 수의 각 자리에 존재하는 홀수의 갯수를 센다.
def solve(num,cnt):
    l=len(num)
    cnt+=oddcheck(num)
    global maxresult,minresult
    if(l==1):
        minresult=min(minresult,cnt)
        maxresult=max(maxresult,cnt)
        return # 모든 탐색이 완료됐으므로 return
    elif(l==2):
        pivot=int(num[0]+num[1])
        first=pivot//10
        second=pivot%10
        n=first+second #2자리인 경우 앞자리수+뒷자리수
        solve(str(n),cnt) 
    items=[] # ex)1234라 하면 1,2,3번째에서 끊을 수 있으므로 range 범위 설정.
    for i in range(1,l):
        items.append(i)
    combi=list(combinations(items,2)) # 끊어줄 2곳의 index를 담음(3곳으로 나눠야 하면 2곳을 끊으면 된다.)
    for i in range(len(combi)):
        newn=int(num[:combi[i][0]])+int(num[combi[i][0]:combi[i][1]])+int(num[combi[i][1]:])
        solve(str(newn),cnt)

minresult=987654321
maxresult=0
solve(num,0)
print(minresult,maxresult)
profile
모든 생각을 구현해내기 위해 노력하는 개발자

0개의 댓글