문제 링크: 9506번: 약수들의 합 (acmicpc.net)
9506번: 약수들의 합
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
www.acmicpc.net

코드 구상

작성 코드
while True:
n = int(input())
if n == -1:
break
cnt = 0
num = []
for i in range(1, n):
if n % i == 0:
num.append(i)
cnt += 1
if sum(num) == n:
print(str(n) + " =", end=' ')
for k in range(cnt):
print(num[k], end=' ')
if k != cnt-1:
print("+ ", end='')
print()
else:
print(str(n) + " is NOT perfect.")
알아간 점
1.출력할 때, 코드를 더 간단히
- 완전수를 출력하는 과정에서 코드를 더 간단히 하는 방법이 있을 것 같아 다른 사람들의 풀이를 참고하였는데 언패킹과 sep에 대해 알게 되었다.
- 언패킹은 말 그래도 묶인 리스트들을 푼다고 생각하면 된다. *를 사용한다.예를 들어 a = [1, 2, 3]인 리스트가 있고 print(*a)를 하면 1 2 3 으로 출력된다.
- sep은 end와 쓰임이 헷갈려 평소에 잘 활용하지 못했던 것 같다. sep은 출력할 요소들을 분리하는 역할로 각각의 요소 중간에 무언가를 넣어 줄 수도 있다. end는 출력하는 문자열의 마지막에 무엇을 넣을지 지정하는 역할을 한다. 파이썬에서 print() 함수는 출력 후에 줄바꿈을 수행되는데, end를 사용하여 변경할 수 있다.
- 따라서 위 내용을 적용해 수정한 코드는 다음과 같다.
while True:
n = int(input())
if n == -1:
break
num = []
for i in range(1, n):
if n % i == 0:
num.append(i)
if sum(num) == n:
print(str(n) + " =", end=' ')
print(*num, sep=' + ')
else:
print(str(n) + " is NOT perfect.")
- 약수의 개수를 굳이 세도 되지 않고 출력이 가능하니 cnt 변수는 불필요하다. 따라서 삭제해주었다.
- 출력 코드가 간단해지니 출력하고자 하는 것이 무엇인지 좀 더 쉽게 알아볼 수 있다.
*피드백은 언제나 환영입니다 :)
'백준 문제풀이 > 파이썬' 카테고리의 다른 글
| [백준/파이썬] #1223 이상한 곱셈 (0) | 2024.02.21 |
|---|---|
| [백준/파이썬] #1292 쉽게 푸는 문제 (1) | 2024.02.15 |
| [백준/파이썬] #2609 최대공약수와 최소공배수 (0) | 2024.02.09 |
| [백준/파이썬] #2869 달팽이는 올라가고 싶다 (0) | 2024.02.07 |
| [백준/파이썬] #10814 나이순 정렬 (1) | 2024.02.06 |