Dev_from the Bottom

#13. Algorithm09_python) 소수의 합 본문

Algorithm_study

#13. Algorithm09_python) 소수의 합

고무라면 2022. 5. 14. 20:34

문제) 소수의 합

임의의 정수를 입력받아, 그 안에 포함된 소수의 합을 구하라

 


 

step1) 테스트 및 밑그림

  • 10 입력 받았다고 가정할 때, 2~10 사이에 속한 소수의 합 계산
  • 2 + 3 + 5 + 7 = 17
n = 10
sum = 0

for i in range(2, 10+1):      # 2~10까지 소수인지 판단하고자
    isPrime = True            # 소수 여부 불린 변수
    for j in range(2, i):     # 특정 숫자가 소수인지 판단
        if i % j == 0:
            isPrime = False   # 나눠서 떨어지는 값 있으면, 소수 아님
            # break
            print(i)
        if isPrime == True:
            sum += i

print()
print(sum)

>>>
4
6
6
8
8
9
10
10

62

""
실패
- 소수가 찍히지 않음
- 함계도 잘못된 답을 출력함
	=> 두 번째 if 문의 위치가 잘못되었음!
"""

 

step2) 테스트 및 밑그림 + 정답 출력

  • 10 입력 받았다고 가정할 때, 2~10 사이에 속한 소수의 합 계산
  • 2 + 3 + 5 + 7 = 17
n = 10
sum = 0                       # 합계(정답) 변수

for i in range(2, n+1):       # 2~n까지 소수인지 판단하고자
    isPrime = True            # 소수 여부 불린 변수
    for j in range(2, i):     # 특정 숫자가 소수인지 판단
        if i % j == 0:
            isPrime = False   # 나눠서 떨어지는 값 있으면, 소수 아님
            break
    if isPrime == True:       # 소수라면,
        sum += i              # 합계 sum 변수에 누적

print('answer :', sum)

>>>
answer : 17

 

step3) 메서드

def algo09(n):
    sum = 0                        # 합계(정답) 변수

    for i in range(2, n+1):        # 2~n까지 소수인지 판단하고자
        isPrime = True             # 소수 여부 불린 변수
        for j in range(2, i):      # 특정 숫자가 소수인지 판단
            if i % j == 0:
                isPrime = False    # 나눠서 떨어지는 값 있으면, 소수 아님
                break
        if isPrime == True:        # 소수라면,
            sum += i               # 합계 sum 변수에 누적
    return sum                     # 결과 리턴

# 정답 출력
n = int(input('n 입력 : '))
print(f'{n} 이하 소수의 합 : {algo09(n)}')

>>>
n 입력 : 10
10 이하 소수의 합 : 17

 


# 배운점

  • 이중 for문을 스스로 고민해서 활용
  •  isPrime이라는 불린 변수를 실제로 이용함

# 소회

  • 지난번 로직을 가져와, 확장하여 문제 해결함

 

Comments