티스토리 뷰

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

 

 

 

 

👩‍💻문제 이해

N의 생성자는 N보다는 작지만 N+(각 자리 수의 합) 이므로 0부터 하나씩 확인 하는 것보다 N부터 1씩 줄어들며 확인하는 것이 나을 것이라 생각했다.

 

 

 

👩‍💻reversed(N)을 범위로 하는 반복문 사용  : 성공🌈

n = int(input())
res = []
for i in reversed(range(n)):
  sum = 0
  sum += i
  for j in range(len(str(i))):
    sum += int(str(i)[j])
  if sum == n :
    res.append(i)

if len(res) == 0:
  print(0)
else:
  print(res[len(res)-1])

 

 

n = int(input())
res = []
for i in reversed(range(n)):
# N-1부터 1씩 줄어들며 반복

  sum = 0
  sum += i
  # 숫자 + 각 자리의 숫자
  
  for j in range(len(str(i))):
    sum += int(str(i)[j])
    # 각 자리의 숫자를 더해준다
    
  if sum == n :
    res.append(i)
    # 숫자 + 각 자리의 숫자가 입력받은 수 n과 같아지면 생성자 i를 res 리스트에 추가

if len(res) == 0:
  print(0)
else:
  print(res[len(res)-1])
  # 큰 수부터 판별하기 때문에 가장 작은 생성자는 리스트의 마지막에 존재한다.

 

 

 

Point

반복문에서 내림차순으로 반복하는 법!

1. reversed 사용
ex) for i in reversed(range(10)):
         
2. for문에 직접 입력
ex) for i in range(10,0,-1):

 

결과비교

 

댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday