문제 링크
https://www.acmicpc.net/problem/1929
문제
Q. 정수를 입력 했을 때, 그 정수 이하의 소수를 모두 반환하시오.
소수는 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다.
# 20이 입력된다면, 아래와 같이 반환해야 합니다!
[2, 3, 5, 7, 11, 13, 17, 19]
정답 풀이
1번 풀이
풀이
- 소수를 넣을 배열 선언
- 2 ~ number 까지의 숫자들이 n 에 들어가는 것을 반복
- 2 ~ n-1 까지 i 에 들어가는 것을 반복
- n 이 i 로 나눠떨지면 소수가 아님으로 반복분 탈출
- 2 ~ n-1 까지 n 이 나눠 떨어지지 않으면 배열에 추가
정답 코드
input = 20
def find_prime_list_under_number(number):
prime_list = []
for n in range(2, number+1):
for i in range(2, n):
if n % i == 0:
break
else:
prime_list.append(n)
return prime_list
result = find_prime_list_under_number(input)
print(result)
2번 풀이
풀이
- n 이 19 일 경우 2와 3으로 나누어 떨어지지 않는 경우 6으로도 나누어 떨어지지 않게 됨 즉, 2와 3으로 나누어 떨어지면 6으로 나누어 떨어짐
- 1번 풀이의 n 보다 작은 수 대신 → n 보다 작은 소수들로 비교하면 됨
정답 코드
def find_prime_list_under_number(number):
prime_list = []
for n in range(2, number+1):
for i in prime_list:
if n % i == 0:
break
else:
prime_list.append(n)
return prime_list
result = find_prime_list_under_number(input)
print(result)
3번 풀이
풀이
- 소수이기 위한 필요 충분 조건 : N의 제곱근 보다 크지 않은 어떤 소수로도 나눠 떨어지지 않는다
- 예를 들어
- i * i ≤ n 일 때까지만 비교
정답 코드
input = 20
def find_prime_list_under_number(number):
prime_list = []
for n in range(2, number + 1):
for i in prime_list:
if i * i <= n and n % i == 0:
break
else:
prime_list.append(n)
return prime_list
result = find_prime_list_under_number(input)
print(result)
문제를 풀고 알게 된 개념 및 소감
- 소수 : 자기 자신과 1 외 에는 아무것도 나눌 수 없다.
- for-else
- 입력된 배열에 특정 값이 존재하느냐 아니냐에 따라서 행동을 하고 싶은 경우 사용
- for 문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행 됐을 경우 else 문이 실행 ㅋ
for x in [1,2,3,4]
print(x)
else:
print("완료")
출력
1
2
3
4
완
'백준' 카테고리의 다른 글
| [알고리즘] - 회문 검사 / 파이썬 (0) | 2025.09.02 |
|---|---|
| [알고리즘] - 링크드리스트 합 계산 (1) | 2025.08.28 |
| [백준] - 문자열 뒤집기(1439)/파이썬 (1) | 2025.08.25 |
| [알고리즘] - 반복되지 않는 문자 (0) | 2025.08.24 |
| [알고리즘] - 곱하기 or 더하기 (0) | 2025.08.24 |