반응형
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 | 예제 출력 |
4 1 3 5 7 |
3 |
정답
import sys
if __name__ == '__main__':
T = int(sys.stdin.readline().strip())
nums = list(map(int, sys.stdin.readline().strip().split()))
result = 0
for i in nums:
if i <= 1:
continue
for j in range(2, i + 1):
if i == j:
result += 1
elif i % j == 0:
break
print(result)
Tip
소수란?
소수란 1 이상의 숫자가 1과 자기 자신으로만 나눠지는 수를 뜻한다.
그러므로 1은 1 이상의 숫자가 아니기 때문에 소수가 아니다.
break
import sys
from typing import List
if __name__ == '__main__':
T: int = int(sys.stdin.readline().strip())
nums: List[int] = list(map(int, sys.stdin.readline().strip().split()))
cnt: int = 0
res_cnt: int = 0
for i in nums:
cnt = 0
if i <= 1:
continue
for j in range(2, i + 1):
if i % j == 0:
cnt += 1
if cnt == 1:
res_cnt += 1
print(res_cnt)
다른 사람들의 코드를 보면 이런 형식의 코드가 몇몇 보인다. 하지만 이런 코드를 돌리게 된다면 i부터 자기 자신까지 다 돌려야 하므로 많은 for문이 돌아가게 된다. 목적을 달성했거나, 더 이상 돌릴 필요가 없는 경우 중간에 break를 사용하여 for문을 어떻게든 덜 돌리도록 하자.
for j in range(2, i + 1):
if i == j:
result += 1
elif i % j == 0:
break
횟수/실행시간 | break 사용 | break 미사용 |
1 | 80ms | 84ms |
2 | 72ms | 72ms |
3 | 68ms | 80ms |
4 | 68ms | 72ms |
백준 서버 상태에 따라 실행시간이 다르긴 하지만 참고용으로 알고 있으면 좋을 것 같다.
Multiple if vs if ~ elif
a = 1
b = 3
# a랑 b가 같은지 확인
if a == b:
print('Same!')
# a가 더 큰지 확인
if a > b:
print('a')
# b가 더 큰지 확인
if b > a:
print('b')
# 총 3번 확인
a = 1
b = 3
# 위에 조건이 충족할 경우 밑에 있는 조건은 넘어감
# 최소 1번, 최대 3번
if a == b:
print('Same!')
elif a > b:
print('a')
elif b > a:
print('b')
여러 개의 조건을 확인할 경우 우선 순위를 잘 정해서 if ~ elif를 쓰도록 하자.
※ 모든 조건을 확인해야 하는 경우는 다르다.
반응형
'Python 알고리즘' 카테고리의 다른 글
[Python] 코드업 Python 100제 6097번 설탕과자 뽑기 (0) | 2022.01.24 |
---|---|
[Python] 코드업 Python 100제 6096번 바둑알 십자 뒤집기 (0) | 2022.01.24 |
[Python] 백준 2609번 최대공약수와 최소 공배수 (유클리드 호제법) (0) | 2021.10.01 |
[Python] 백준 2309번 일곱 난쟁이(브루트 포스) (0) | 2021.09.30 |
[Python] 백준 10870 피보나치 수 5 (0) | 2021.09.29 |