728x90

https://www.acmicpc.net/problem/9440

 

9440번: 숫자 더하기

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

www.acmicpc.net

문제

강민이가 초등학교 3학년일 때, 담임선생님이 이런 문제를 냈었다.

숫자 1, 2, 7, 8, 9를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요?

강민이는 이 문제의 답이 207(78 + 129)이라고 생각했다. 그런데 선생님은 책 4페이지에 있는 비슷한 문제를 모두 풀어오라는 숙제를 내셨다. 

작년부터 프로그래밍을 시작한 강민이는 이런 숙제보다 코딩을 더 재밌어했다. 그래서 강민이는 이 숙제를 코딩으로 해결하기로 했다!

어린 강민이를 위해 코딩을 도와주자.

더보기

입력

한 줄에 하나씩 연습문제가 주어진다.

각 줄에서 첫 번째로 나오는 정수 N (2 ≤ N ≤ 14) 은 연습문제에서 사용될 숫자의 개수이다.

두 번째부터 사용될 N개의 숫자가 주어진다. 0이 아닌 수가 최소 2개 이상 존재한다

마지막 줄에 0을 입력하면 프로그램이 종료된다.

 

출력

각 연습문제마다 정답을 출력한다.

 

풀이방법

풀이방법은 간단합니다.

 

1. 숫자들을 정렬합니다.

-> 정렬해야 작은 수가 큰 자릿수를 차지하기 때문에 덧셈을 했을 때, 작은 수가 나옵니다.

2. 모든 0을 index가 0의 개수 + 2에 해당하는 index에 모두 넣습니다.

3. 숫자의 길이가 짝수인지 홀수인지 구합니다.

3-1. 짝수인 경우 a,b 배열에 맨 앞의 숫자 하나씩 넣습니다.

3-2. 홀수인 경우, a 배열에 0번째 index,를 넣은 뒤, a, b 배열에 번갈아 숫자를 넣습니다.

 

짝수인 경우

1 3 0 0 2 6

(정렬)

0 0 1 2 3 6

(0을 뒤로 넘김)

1 2 0 0 3 6

a배열 1 0 3, b 배열 2 0 6

-> 309

 

홀수인 경우

1 3 0 0 0 2 6

(정렬)

0 0 0 1 2 3 6

(0을 뒤로 넘김)

1 2 0 0 0 3 6

a배열 1 0 0 6 b  배열 2 0 3

->1209

 

 

코드

import sys
from collections import deque

while True:
    arr = deque(map(int, sys.stdin.readline().rstrip().split()))
    if arr[0] == 0:
        break
    arr.popleft()
    # 정렬
    arr = sorted(arr)
    zeros = 0
    for i in arr:
        if i == 0:
            zeros += 1
        else:
            break
    for i in range(zeros):
        arr.pop(0)
    for i in range(zeros):
        arr.insert(2,0)

    a, b = [], []
    if len(arr)% 2 == 0:
        for i in range(len(arr)):
            if i % 2 == 0:
                a.append(arr[i])
            else:
                b.append(arr[i])
        print(int("".join(map(str,a)))+ int("".join(map(str,b))))
    else:
        a.append(arr[0])
        for i in range(1,len(arr)):
            if i % 2 == 1:
                a.append(arr[i])
            else:
                b.append(arr[i])
        print(int("".join(map(str,a)))+ int("".join(map(str,b))))

결론

0을 뒤로 넘기는 것, 짝수와 홀수일때 수를 넘기는 것과 str, int 형변환만 잘한다면 바로 풀리는 문제입니다.

728x90