언어: python
번호: 9506
제목: 약수들의 합
등급: 브론즈 1
풀이 과정:
숫자 n을 입력받아 -1일 경우에는 멈추고, 아니면 계속 입력을 받는다. n의 약수가 들어있는 리스트로 만들어 리스트의 합과 n이 같을 경우 약수들의 합으로 나타내어 출력하고, 아니면 n is NOT perfect.를 출력한다.
n의 약수를 구할때 모든 약수로 n을 나누면 짝이 나온다. 예를 들어 18의 약수는 (2, 9), (3, 6)이 짝이라 할 수 있다. 따라서 1부터 sqrt(n)까지의 약수와 그 짝을 구하면 된다.
코드:
# 9506 b
while 1:
lst = []
n = int(input())
if n == -1:
break
for i in range(2, int(n**0.5)+1):
if n%i == 0:
lst.extend((i, n//i))
lst.append(1)
if sum(lst) == n:
lst.sort()
print(n, "=", end=' ')
print(*lst, sep=' + ')
else:
print(n, "is NOT perfect.")
메모:
append() > 리스트에 그대로 입력한다. 리스트에 리스트를 넣으면 2차원 리스트가 된다.
extend() > 리스트에 요소만 입력한다. 리스트에 리스트의 요소만 들어가 1차원 리스트가 된다.
print(*list) > 리스트의 요소가 차례대로 출력된다. for문으로 출력하는것보다 간단하다.
'BOJ' 카테고리의 다른 글
[백준/BOJ] python 2231번 분해합 (0) | 2023.01.25 |
---|---|
[백준/BOJ] python 1343번 폴리오미노 (0) | 2023.01.25 |
[백준/BOJ] python 8958번 OX퀴즈 (0) | 2023.01.25 |
[백준/BOJ] python 1904번 01타일 (0) | 2023.01.25 |
[백준/BOJ] python 1010번 다리 놓기 (0) | 2023.01.25 |