n = int(input())
ls = list(map(int, input().split()))
result = 0
for i in ls:
cnt = 0
if i == 1:
continue
for j in range(2, i + 1):
if i % j == 0:
cnt += 1
if cnt == 1:
result += 1
print(result)
풀이
먼저 n 변수로 몇 개의 정수를 입력받을지 설정하고, ls 변수로 입력받는 정수를 list로 각각 정수로 저장해요.
다음으로 result 변수를 설정해서 0으로 초기화 시켜놓은 뒤
for문으로 ls 리스트 안에 들어있는 정수들을 i로 하나씩 반복해주기로 해요.
key point 1
for문 안에서 소수를 찾기위한 cnt 변수를 0으로 for문이 반복될 때마다 초기화 시켜주고
key point 2
if문으로 만약 i가 1이라면, 즉 1은 소수가 아니기 때문에
if문으로 1일 경우에는 continue, 1은 산정하지 않고 for 반복문을 진행시켜요.
이중 for문으로 for문 안에서 또 하나의 for문으로 1을 제외한 2부터 시작해야되니
range(2, i + 1)로 해서 2부터 i + 1 전의 값까지 j로 하나씩 반복해줘요.
key point 3
여기서 i % j == 0, 즉 하나의 예시로 i가 9일 경우에 j는 2~9의 값을 갖게되고
그렇다면 9 % 3 == 0, 9 % 9 ==0 두 가지의 경우를 갖기 때문에
if문으로 설정해놓은 cnt += 1이 두 번 해당되서 cnt는 2가 되요.
그렇다면 마지막 if문인 cnt == 1일 때 result += 1 하라는 것에 해당되지 않으니 result는 증가하지 않아요.
이것으로 9는 소수가 아니라는 코드가 완성되고 소수를 판별할 수 있어요!
정리
1) cnt가 매번 0으로 초기화 되고
2) 1은 소수가 아니므로 continue로 넘어가고
3) 2부터 i + 1 까지 i % j == 0의 값에 따라서 cnt를 증가하고 (소수가 아닌 정수는 cnt가 2 이상임)
4) cnt가 1일 때만 result에 1을 증가시키므로 소수일 때만 result가 올라가게 된다! 풀이 끄-읏👏
댓글