문제
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
예제 입력 1 복사
6
12
28
-1
예제 출력 1 복사
6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14
while True:
lst = []
n = int(input())
if n <= 0:
break
for i in range(n):
if n % (i+1) == 0:
lst.append(i+1)
lst = lst[:-1]
if sum(lst) == n:
# for i in lst:
# # print(f"{i}", sep="")
print(f"{n} =", end=" ")
print(*lst, sep=" + ")
else:
print(f"{n} is NOT perfect.")
마지막에 완전수를 출력해주는 부분에서 애를 먹었던 문제.. 결국 검색했다.
*리스트는 완전 잊고 있었다.
*list
리스트를 일렬로 출력해준다.
print(f"{n} =", end=" ")
print(*lst, sep=" + ")
end 옵션을 사용하면 그 뒤의 출력값과 이어서 출력한다. 즉, 줄바꿈을 하지 않게 된다.
sep 옵션을 사용하면 그 뒤의 출력값과 분리하여 출력한다. sep= 뒤에 해당하는 문자로 출력값들을 분리한다.
코드 작성 시에 n까지 순회를 하지 않았어도 됐다. 결국 [:-1]로 빼줬으니까 말이다.
전체적인 로직은 맞게 짜는 듯! 이 정도는 쉽다.. ㅎㅎ 하지만 출력하는 부분에 있어서 공부를 더 해야겠다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 2581번: 소수 (1) | 2024.07.23 |
---|---|
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 1978번: 소수 찾기 (1) | 2024.07.22 |
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 2501번: 약수 구하기 (2) | 2024.07.22 |
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 5086번: 배수와 약수 (0) | 2024.07.22 |
백준 > 단계별로 풀어보기 > 일반 수학 1 > 1193번: 분수찾기 (0) | 2024.07.22 |