
문제를 읽어보면 입력받은 수보다 크거나 같은 수 중에서 가장 작은 소수를 찾는 문제이다
소수란 약수로 1과 본인 자신만을 가지는 수이다
이를 확인하기 위해서 그 수보다 작은 수를 나누어가며 나누어떨어지는지 확인해야하는데,
생각해보면 굳이 소수를 확인할 때 모든 수를 나누어볼 필요는 없다
왜냐하면 확인하는 수의 제곱근의 크기보다 큰 수로 나누어 떨어지지 않기 때문이다
이해가 안 될수도 있으니 예시를 통해 확인해보자
예를 들어 49라는 숫자가 존재할 때, 7까지만 확인해보아도 문제가 없다
제곱근보다 큰 수로 나누어떨어지려면 반드시 그 짝수(즉, 제곱근 이하의 수)로도 나누어떨어지기 때문이다
좀 더 쉽게 설명하면, 만약 어떤 숫자 N이 a와 b라는 두 수의 곱으로 표현될 수 있다면,
이때 a와 b 중 최소 하나는 N의 제곱근 이하임을 확인할 수 있다
따라서 제곱근까지만 나누어보고 나누어떨어지는 숫자가 없다면 그 수는 소수라는 것을 판단가능하다
이를 적용하여 코드를 작성하면 된다
단, 주의할 점이 존재한다 문제를 다시 읽어보면 n의 범위가 0부터 시작하기 때문에 0과 1에 대한 검사도 존재해야 한다
그 검사가 존재하지 않는다면 필자처럼 틀렸습니다 라는 문구를 보게 될 것이다..

n = int(input())
for _ in range(n):
prime = int(input())
while True:
if prime == 0 or prime == 1:
Is_prime = False
else:
Is_prime = True
for i in range(2, int(prime ** 0.5) + 1):
if prime % i == 0:
Is_prime = False
break
if Is_prime:
print(prime)
break
else:
prime += 1
기존의 코드는 if prime == 0 ~ Is_prime = True 부분이 존재하지 않아서 틀렸었다
이런 유형의 문제를 풀 때에는 항상 주의해야한다... ㅜ
'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 4948 베트르랑 공준(실버 2) - Python (1) | 2024.11.20 |
|---|---|
| [Baekjoon]백준 1929 소수 구하기(실버 3) - Python (0) | 2024.11.19 |
| [Baekjoon]백준 2485 가로수(실버 4) - Python (0) | 2024.11.17 |
| [Baekjoon]백준 1735 분수 합(실버 3) - Python (1) | 2024.11.16 |
| [Baekjoon]백준 13241 최소공배수(실버 5) - Python (1) | 2024.11.15 |