728x90
우테코를 같이 지원했던 사람들끼리 슬랙에서 만나 스터디를 꾸렸다
평일 오전 9-12시 동안 게더타운에서 모각코를 진행할 예정이다
확실히 혼자하는 것보다 더 집중하게 된다는 점에서 하기 잘했다
문제
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
나의 풀이
#입력 값(n) 받기
n = int(input())
#결과를 담을 변수 생성
result = 0
#for 문으로 1부터 N까지의 모든 수를 계산하보며 분해합을 구함
#range의 범위가 (n+1)이유는 하나 전 까지 받기 때문에 범위가 (1, N+1)이 된다
for i in range(1, n+1):
nums = list(map(int, str(i)))
result = sum(nums) + i
if result == n:
print(i)
break
#값이 없을 경우, 분해대상 == 생성자인 경우
if i == n:
#0을 출력
print(0)
내가 본 좋은 코드
N = int(input())
x = 0
for i in range(N):
a = list(map(int, str(i)))
if N == sum(a) + i:
x = i
break;
print(x)
정수의 각 자릿수를 리스트로 받기 위해서는 map()함수를 활용해야 한다
문자열을 입력받아야 하므로 str()로 형변환을 한 후 map()함수로 각 자릿수 값을 int로 형변환한다
만약, 216을 입력받았다면 리스트 (위의 코드 기준)nums에 [2,1,6]을 담을 수 있다
답을 찾는 부분은 'result = sum(nums) + i'인 상태가 생성자를 찾은 시점이므로 이럴 때, 반복문을 탈출하여 값을 출력한다
만약, n까지 진행된다면 생성자가 없는 것으로 '0'을 출력한다
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 짝수와 홀수 파이썬 (0) | 2022.12.19 |
---|---|
백준 2606 - 바이러스 파이썬 (0) | 2022.12.05 |
백준 11399 - ATM 파이썬 (0) | 2022.12.01 |
백준 1260- DFS와 BFS 파이썬 (0) | 2022.11.30 |
백준 9012 괄호 파이썬 (0) | 2022.11.29 |
댓글