본문 바로가기

공부하는 것들/알고리즘

백준 9440 : 숫자 더하기(그리디)***

www.acmicpc.net/problem/9440

 

9440번: 숫자 더하기

강민이가 초등학교 3학년일 때, 담임선생님이 이런 문제를 냈었다. 숫자 1, 2, 7, 8, 9 를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요? 강민이는 이 문제의 답이 2

www.acmicpc.net

def solve(T):
    N = T[0]
    numbers = sorted(T[1:])
    zeros = numbers.count(0)
    n, m = '',''

    for i in range(zeros,len(numbers)):
        if (zeros-i)%2==0: n+= str(numbers[i])
        else: m+= str(numbers[i])
    new_n = n
    new_m = m
    for i in range(zeros):
        if len(n)==len(m):
            if i%2 == 0: new_n = new_n[0]+'0'+new_n[1:]
            else : new_m = new_m[0]+'0'+new_m[1:]
        else: 
            if i%2 == 0: new_m = new_m[0]+'0'+ new_m[1:]
            else : new_n = new_n[0]+'0'+new_n[1:]

    return int(new_n)+int(new_m)
    
if __name__=='__main__':
    T = []
    while True:
        case = list(map(int,input().split()))
        if case==[0]: break
        T.append(case)
    for t in T:
        print(solve(t))

 

기본 아이디어는 금방 떠올렸는데, 코너 케이스를 고려해주는 게 까다로웠다.

if 문 줄여서 다시 짜봐야겠다.