본문 바로가기

Algorithm/알고리즘

[백준 1929번] set 정렬

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

처음에 

import math
import sys

def is_prime_eratos(x):
    array = [True for _ in range(x+1)]
    for i in range(2, int(math.sqrt(x))+1):
        if array[i]==True:
            j=2
            while i*j<=x:
                array[i*j]=False
                j+=1
    return [i for i in range(2,x+1) if array[i]]


M, N = map(int, sys.stdin.readline().split())
for i in list(set(is_prime_eratos(N))-set(is_prime_eratos(M-1))):
    print(i)

이렇게 했다가 자꾸 채점을 시작하자마자 틀렸다고 나와서 어디가 문제인가 한참을 고민하다가 질문 검색 게시판으로 가서 다른 분들이 질문 올려놓은 걸 보다가 set은 수를 정렬해주지 않는다는 것을 보았다. "A set object is an unordered collection of distinct hashable objects." 즉, 해시를 통해 구현된 것이기 때문에 구현체에 따라 얼마든지 정렬되지 않은 순서로 순회를 할 수 있다고.. 

 

단순히 마지막 부분을

for i in sorted(list(set(is_prime_eratos(N))-set(is_prime_eratos(M-1)))):
    print(i)

이렇게로만 고치니 바로 맞다고 떴다.

 

몇 개의 예제를 출력해봤을 땐 다 순서가 오름차순으로 나오길래 이 부분은 문제가 있을 거라고 생각도 못했는데, 또 하나 배웠다.

'Algorithm > 알고리즘' 카테고리의 다른 글

[Python] set 연산  (0) 2023.01.07
[Python] 문자열에서 find 함수  (0) 2023.01.01
[Python] DFS, BFS  (0) 2022.10.02
피보나치 수열의 항 구하기 (피사노 주기)  (0) 2021.03.26
차대값과 차소값 찾기  (0) 2021.03.26