소수 찾기 성공분류
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞은 사람 |
정답 비율 |
2 초 |
128 MB |
55078 |
25860 |
21348 |
48.403% |
https://www.acmicpc.net/problem/1978
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
알고리즘 분류
백준 알고리즘 # 1978번 : 소수 찾기
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가 올라가게 된다! 풀이 끄-읏👏
자세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏
최종 소스코드
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 | 2440 : 별 찍기 - 3 (Python / 파이썬) (0) | 2020.11.23 |
---|---|
백준 알고리즘 | 1874 : 스택 수열 (Python / 파이썬) (0) | 2020.11.23 |
백준 알고리즘 | 2750 : 수 정렬하기 (Python / 파이썬) (0) | 2020.11.03 |
백준 알고리즘 | 1912 : 연속합 (Python / 파이썬) (0) | 2020.10.12 |
백준 알고리즘 | 1929 : 소수 구하기 (Python / 파이썬) (0) | 2020.10.12 |
댓글