알고리즘[Python]/백준 알고리즘
[ 9440 ] [ Greedy ] 숫자 더하기
병훈1234
2022. 1. 1. 15:20
https://www.acmicpc.net/problem/9440
9440번: 숫자 더하기
강민이가 초등학교 3학년일 때, 담임선생님이 이런 문제를 냈었다. 숫자 1, 2, 7, 8, 9 를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요? 강민이는 이 문제의 답이 2
www.acmicpc.net
풀이 과정
- 그리디 알고리즘 문제인데 처음 생각할 때 꼬여서 어떻게 풀어야 할지 고민을 정말 많이한 문제다ㅜ
- 숫자를 오름차순으로 정렬한다.
- 숫자들로 두개의 정수를 만들어야 하므로 a, b 리스트를 만들어 둔다.
- a, b 리스트에 번갈아가면서 작은 숫자부터 넣어준다.
- a, b 리스트에서 맨 앞에 넣을때는 0이 아닌 수중에 가장 작은 숫자를 넣어주어야 한다.
- 리스트에 채우는 작업이 종료되면, 두 리스트를 정수화하여 더해주면 된다.
- 더해준 값을 출력한다.
소스 코드
import sys
from collections import deque, defaultdict
input = lambda: sys.stdin.readline().rstrip()
while True:
p = list(map(int, input().split()))
numbers = defaultdict(lambda: 0)
if p[0] == 0:
break
for n in p[1:]:
numbers[n] += 1
a = []
b = []
flag = True
for i in range(p[0]):
target = None
if flag:
target = a
else:
target = b
for j in range(10):
if len(target) == 0 and j == 0:
continue
if numbers[j] > 0:
numbers[j] -= 1
target.append(j)
break
flag = not flag
print(int("".join(map(str, a))) + int("".join(map(str, b))))