[알고리즘] BOJ 9440 숫자 더하기

김상현·2022년 3월 25일
0

알고리즘

목록 보기
57/301
post-thumbnail

[BOJ] 9440 숫자 더하기 바로가기

📍 문제

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

숫자 1, 2, 7, 8, 9 를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요?
강민이는 이 문제의 답이 207(78 + 129)이라고 생각했다. 그런데 선생님은 책 4페이지에 있는 비슷한 문제를 모두 풀어오라는 숙제를 내셨다.

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

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


📍 입력

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

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

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

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


📍 출력

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


📍 풀이

✍ 코드

from sys import stdin
while True:
  N = list(map(int,stdin.readline().split()))
  if N[0] == 0: # 프로그램 종료
    break
  N = sorted(N[1:]) # 정렬
  A, B = "", "" # 두 숫자 문자열
  zeroCount = 0 # 0의 갯수
  TF = True
  for num in N:
    if num == 0: # 0일 경우
      zeroCount += 1 # 0의 갯수 + 1
      continue # 다음 반복문 시작
    # 각 숫자 문자열에 값을 차례로 추가
    if TF:
      A += str(num)
      TF = False
    else:
      B += str(num)
      TF = True
  for _ in range(zeroCount): # 0의 갯수에 맞추어 각 수의 두번째 자리에 0 추가
    if len(A) == len(B):
      A = A[0] + '0' + A[1:]
    else:
      B = B[0] + '0' + B[1:]
  print(int(A)+int(B))
profile
목적 있는 글쓰기

0개의 댓글