일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 2단계
- 1단계
- 파이썬
- ubuntu
- Object detection
- 백준
- 코드수행
- Python
- CS231n
- ssd
- MySQL
- 자료구조 및 실습
- 실전알고리즘
- test-helper
- C++
- cs
- 머신러닝
- 3단계
- 전산기초
- 모두를 위한 딥러닝 강좌 시즌1
- SWEA
- STL
- AWS
- 구현
- docker
- 딥러닝
- 그리디
- 프로그래머스
- pytorch
- 이것이 코딩테스트다 with 파이썬
- Today
- Total
곰퓨타의 SW 이야기
[백준 1929 소수 구하기] set 함수 주의 본문
과거의 블로그에 정리했던 소수 구하기를 응용하며 문제를 해결해보았다.
해결해야하는 문제는 다음과 같다.
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
이 문제는 그동안 소수 구하기 관련 글들을 많이 남겼었기 때문에 그를 바탕으로 작성하였었다.
처음에는 set 함수를 이용하여 에라토스테네스의 체 알고리즘을 이용하여 다음과 같이 작성하였다.
import math
m,n = map(int, input().split())
num = set(range(2,n+1))
for i in range(2,int(math.sqrt(n))+1):
if i in num :
num-= set(range(2*i,n+1,i))
for i in list(num) :
if i >= m and i <= n:
print(i)
하지만 set의 경우 list로 변환하였을 때 m부터 n까지의 소수를 순서대로 저장하지 않을 수 있다는 것을 알게 되었다.
따라서 오답이 떴다.
이를 극복하기 위해 list 로 변환 후 sorting 하는 작업을 수행하였다.
import math
m,n = map(int, input().split())
num = set(range(2,n+1))
for i in range(2,int(math.sqrt(n))+1):
if i in num :
num-= set(range(2*i,n+1,i))
list_num = list(num)
list_num.sort()
for i in list_num :
if i >= m and i <= n:
print(i)
아래와 같이 코드를 작성한 결과 통과가 떴다.
최근 보고 있는 책인 '이것이 코딩테스트다 with 파이썬 편_나동빈_한빛미디어' 에서도 작성한 코드가 있어서 아래에 정리해보았다.
www.hanbit.co.kr/store/books/look.php?p_code=B8945183661
이것이 취업을 위한 코딩 테스트다 with 파이썬
IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부터 2020년까지의 코딩 테스트와 알고리즘 대회의 기출문제를 엄선하여 수록하였다.
www.hanbit.co.kr
import math
# M,N 입력 받기
m,n = map(int, input().split())
array = [True for i in range(1000001)]
array[1] = 0 #1은 소수가 아니다
for i in range(2, int(math.sqrt(n))+1) :
if array[i]: #i가 소수인 경우(남은 수인 경우)
j=2
while i*j <= n:
array[i*j] = False
j+=1
# M부터 N까지의 모든 소수 출력
for i in range(m,n+1) :
if array[i] :
print(i)
알고리즘은 정말 많이 존재하기 때문에 여러 가지 시행착오를 해보면서 하나씩 익히는 것이 중요하다는 것을 알 수 있었다.✨
'TIL > 백준' 카테고리의 다른 글
[백준 5585 거스름돈] 그리디 알고리즘 활용하기 (0) | 2021.04.15 |
---|---|
[백준 1759 암호 만들기] 조건 주의하기 (0) | 2021.04.15 |
[백준 14889 스타트와 링크] 문제를 이해하기! (0) | 2021.01.30 |
[백준 14888번 연산자 끼워넣기] itertools 의 활용! (0) | 2021.01.24 |
[백준 14501번 퇴사] dynamic algorithm으로 뿌시기! (0) | 2021.01.24 |