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))
댓글남기기