Baekjoon 문제 풀기 (2231번 : 분해합) Python

2231번 : 분해합

1. 문제읽기


문제대로 구현하기.

입력값이 100만까지였을때 살짝 눈치를 채긴 했는데,
처음에는 규칙을 찾아서 문자열을 만들어서 값을 리턴하는 문제인 줄 알았다.
그래서 규칙을 찾다가 포기하고 그냥 문제대로 구현이나 해보자!
했는데 맞았다!!

2. 제출 코드


0으로 시작하나 1로 시작하나 n으로 끝나나 n-1로 끝나나 별로 답에 상관은 없을 것 같아서 대충 for문을 구현하고, 자릿수 합을 어떻게 짜야하나 싶어서 나름 머리를 굴려보았다.

m 값에 0부터 n-1까지 계속 넣어보면서 문제의 조건을 만족하는 값이 있으면 리턴!
자릿수 값 더하는 방법으로 for문을 한번 더 써주었다.
그러나 조금만 더 생각해보면 이렇게까지 할 필요가 없었다…

n = int(input())


def func(num):
    for m in range(num):
        # m 자릿수 구하기
        strm = list(str(m))
        sumStrm = 0
        for i in strm:
            # m 자릿수 값 더하기 = sumStrm
            sumStrm += int(i)
        if m+sumStrm == n:
            return m
    return 0


print(func(n))

3. 공부할 것


m 값이 int형이므로, 각 자릿수의 합을 구하려면 list함수, map함수, sum함수를 쓰면 쉽게 구할 수 있다.
문자열로 m을 바꾼 뒤, map함수로 int형으로 문자열m의 값을 각각 변환하여 리스트에 담아준 후에 sum함수로 리스트 전체를 더해버리면 된다.
위 코드를 조금 더 편하게 정리하면 아래와 같다.

n = int(input())


def func(num):
    for m in range(num):
        # m 자릿수 구하기
        strm = list(map(int, str(m)))
        sumStrm = sum(strm)
        if m+sumStrm == n:
            return m
    return 0


print(func(n))

댓글남기기