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 문 줄여서 다시 짜봐야겠다.
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 12782 : 비트 우정지수(그리디) (0) | 2021.05.02 |
---|---|
백준 11256 : 사탕 (그리디) (0) | 2021.04.22 |
백준 4796 : 캠핑(그리디) (0) | 2021.03.12 |
백준 2891 : 카약과 강풍(그리디) (0) | 2021.03.07 |
백준 1783 : 병든 나이트(그리디) **** (0) | 2021.03.07 |