[BOJ] 2231 - 분해합

wwan13·2021년 1월 3일
0

문제 설명


어떤 자연수 N 에 대해 그 자연수와 각 자리 수의 합을 더한 값을 분해 합 이라고 한다.
그리고 어떤 자연수 N의 분해합M 에 대해 분해합이 M 이 되는 자연수를 생성자 라고 한다.
이때 어떤 분해합에 대해 그 생성자의 최소값을 구하는 문제 이다.

전체 코드


N = int(input())

result = 0
for i in range(N):
    n = i
    arr = []
    arr.append(n)
    while n > 1:
        arr.append(int(n%10))
        n /= 10
    if sum(arr) == N:
        result = i
        break

print(result)

코드 분석


N = int(input())
  • 문제 조건에 알맞는 입력을 받는 부분이다.

result = 0
for i in range(N):
    n = i
    arr = []
    arr.append(n)
    while n > 1:
        arr.append(int(n%10))
        n /= 10
  • i를 0부터 입력받은 N까지 반복 시킨다.
  • i의 값(자연수) 그리고 각 자리 수를 모두 하나의 리스트에 집어 넣는다.
  • 이때 해당하는 생성자의 값이 없으면 0을 출력하라는 문제의 조건이 있기 때문에 result 값은 처음에 0으로 초기화 해준다.

if sum(arr) == N:
        result = i
        break
  • 해당하는 자연수와 각 자리의 합이 입력받은 N과 같으면 결과값을 그 자연수로 설정하고 해당 반복문을 종료한다.

print(result)
  • 도출된 결과값을 출력하고 프로그램을 마친다

느낀점


솔직히 예쁜 코드인진 잘 모르겠다.
아직 파이썬의 문법에 익숙하지 않고 c언어의 로직이 머리속에 박혀 있어 그 영향이 조금 남아 있는 것 같다.

profile
엉망진창 뒤죽박죽 개발 이야기

0개의 댓글