1주차 | 문제 4. 소수 찾기
문제
정수로 이루어진 수열 A에 있는 수들을 합한 값을 구하기로 한다. 하지만 평범한 합하기는 너무 쉽게 구해지기 때문에, 새로운 조건을 추가하여 값을 추출하고, 추출된 모든 값을 합하기로 한다. 새로운 조건은 아래와 같다.
- 수열 A의 i번째 수를 A_i라고 부른다.
- i가 소수인 A_i를 추출한다.
조건에 따라서 추출된 값들을 모두 합하고, 그 값을 출력하시오.
입력
첫 번째 줄에 수열 A의 길이를 나타내는 양의 정수 n(1≤n≤100,000)이 주어진다. 두 번째 줄에 수열 A의 각 원소의 값 A_i(-100≤A_i≤100)가 공백으로 구분되어 총 n개가 주어진다.
i 번째 수는 A_i의 값이고, 정수이다.
출력
i가 소수인 A_i값들을 합한 값을 출력한다.
풀이
import math
def is_Prime(x):
if x>=2: # 2보다 큰 수만 소수인지 판별함
for i in range(2, int(math.sqrt(x))+1): # n의 약수는 n의 제곱근 범위 안에 있다는 것을 활용
if x%i==0: # i로 나누어 떨어지면(=약수이면) n은 소수가 아니므로 False
return False
return True
else: # 2보다 작은 1과 0은 소수가 아니므로 False
return False
n=int(input())
a=list(map(int,input().split()))
sum=0
for i in range(1,n+1):
if is_Prime(i): # i가 소수이면 i번째 수인 a[i-1]을 더함
sum+=a[i-1]
print(sum)
일반적인 소수 찾기 방법을 이용하여 풀이하였다.
문제 자체의 모호한 부분이 있었다. i번째 수라는 말이 리스트의 인덱스자체를 의미하는지(i=0이면 0번 인덱스), 숫자 세듯이 인덱스 0의 값을 1번째 수로 가정하는지(i=1이면 0번 인덱스)에 대한 언급이 없었기 때문에 sum을 하는 과정에서 어려움을 겪었다.
문제 자체로는 확실한 이해를 할 수 없었으며, 케이스 테스트를 통해 후자의 경우가 이 문제의 해답임을 알 수 있었다.
따라서 a[i-1]을 누적하는 방식을 채택하고 해결할 수 있었다.
반응형