본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 6218. 흐름과 제어 - If 1

by Tarra 2022. 1. 3.

문제) 다음의 결과와 같이 임의의 양의 정수를 입력받아 그 정수의 모든 약수를 구하십시오.

입력 9

출력

1() 9의 약수입니다.

3() 9의 약수입니다.

9() 9의 약수입니다.

 

풀이)

 

1)

 

1
2
3
4
= 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
= int(input())
= 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 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.