문제) 다음의 결과와 같이 임의의 양의 정수를 입력받아 그 정수의 모든 약수를 구하십시오.
입력 9
출력
1(은)는 9의 약수입니다.
3(은)는 9의 약수입니다.
9(은)는 9의 약수입니다.
풀이)
1)
1
2
3
4
|
a = int(input())
for i in range(1, a+1):
if a%i == 0:
print("%d(은)는 %d의 약수입니다." %(i, a))
|
cs |
입력값 a가 주어졌을 때 for문을 통해서 1부터 a값 까지를 모두 a에 나누어
나머지 값이 0이 될 경우 (약수인 경우)에 print()문이 작동되도록 했다.
하지만 이 경우에 a의 값이 무한정 커질 경우 a 이하의 모든 숫자에 대해서 계산이
이루어 지기 때문에 연산이 느려지는 단점이 발생한다.
이러한 단점을 조금이나마 해결하기 위해 다음과 같은 알고리즘을 짜보았다.
2)
1
2
3
4
5
6
7
|
a = int(input())
i = int(1)
for i in range(1,(a//2)+1):
if a%i == 0:
print("%d(은)는 %d의 약수입니다." %(i,a))
print("%d(은)는 %d의 약수입니다." %(a,a))
|
cs |
약수 중 가장 큰 값이 a/2인 것을 이용하여 계산량을 반으로 줄였다.
하지만 이렇게 계산하면 자기 자신은 약수로 취급하여 나오지 않으므로
마지막에 한번 더 자기 자신이 약수임을 표현하는 print문을 배치했다.물론 중복이 발생해 더 개선할 여지가 있는 알고리즘이지만아직 내 경험 수준에서는 힘든 것 같다.
문제 출처 : https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 6230. 흐름과 제어 - 반복 1 (0) | 2022.01.04 |
---|---|
[SW Expert Academy] 6220. 흐름과 제어 - If 3 (0) | 2022.01.04 |
[SW Expert Academy] 6216. 연산자 5 (0) | 2022.01.03 |
[SW Expert Academy] 6209. 연산자 4 (0) | 2022.01.03 |
[SW Expert Academy] 6207. 연산자 3 (0) | 2022.01.03 |