Notice
Recent Posts
Recent Comments
Link
할껀하고놀자
[백준] 2231번 분해합 본문
728x90
완전탐색에 관한 공부를 진행하면서 풀이한 문제입니다.
종만북에서는 재귀를 공부했는데 풀이는 while로 풀었습니다;;
['1','2','3'] -> [1,2,3] 으로 바꾸는 마법코드를 배울 수 있었습니다.
li = list(map(int,li))
맵으로 한번 int 처리해주고 다시 list 화 시키면 되는 것 같습니다.
sum(li) 라는 고마운 함수를 이용하여 li 내부값을 모두 더해주고, 이것으로 답과 비교합니다.
아무것도 담기지 않았을 때 0을 반환해주었고, 그 이외에는 ans 에서 가장 작은 요소를 반환해주었습니다.
n = int(input())
ans = []
def solution(n):
value = n
while n!=0:
li = list(str(n))
li = list(map(int,li))
# print(li)
tmp = (n + sum(li))
if tmp == value:
ans.append(n)
n-=1
if len(ans)==0:
return 0
else:
return min(ans)
print(solution(n))
다른 분들의 코드를 참고하고 싶었으나 파이썬으로 눈에 확 들어오는 코드는 없었습니다.
다만 c++ 코드가 저와 유사하여 첨부합니다.
#include <iostream>
using namespace std;
int N;
int findCreator(void)
{
int creator = 1; //1부터 시작
while (1)
{
int copy = creator;
int sum = creator; //합은 생성자와 생성자의 각 자리 숫자의 합
while (copy) //각 자리 숫자의 합을 구한다
{
sum += copy % 10;
copy /= 10;
}
//조건 성립시 혹은 생성자가 없을 경우
if (creator == N || sum == N)
break;
creator++;
}
return creator;
}
int main(void)
{
cin >> N;
int result = findCreator();
if (result == N)
cout << 0 << endl;
else
cout << result << endl;
return 0;
}
'[IT] > 백준' 카테고리의 다른 글
[백준] 13459번 구슬 탈출 (0) | 2019.10.09 |
---|---|
[백준] 5524번 입실 (0) | 2019.09.29 |
[백준] 2935 소음 (0) | 2019.09.29 |
[백준] 13420 사칙연산 (0) | 2019.09.29 |
[백준] 1010번 다리놓기 (0) | 2019.09.28 |
Comments