[HackerRank] Print Prime Numbers

당당·2023년 7월 25일
0

HackerRank

목록 보기
26/27

https://www.hackerrank.com/challenges/print-prime-numbers/problem

📔문제

Write a query to print all prime numbers less than or equal to 1000. Print your result on a single line, and use the ampersand (&) character as your separator (instead of a space).

For example, the output for all prime numbers <=10 would be:

2&3&5&7

📃SQL 코드

with prime as
(
    select level+1 num
    from dual
    connect by level<1000
)
select listagg(num,'&') within group(order by num)
from prime
where not exists( select 1 from prime b
                 where prime.num!=b.num
                 and mod(prime.num, b.num)=0);

📰출력 결과


📂고찰

처음에는 pl/sql로 할려고 했는데, 생각한 대로 출력이 되지 않았다.
그냥 출력이 안됐다..

https://coding-factory.tistory.com/445

먼저 with절에 대해서 알아보았다.

with prime as
(
    select level+1 num
    from dual
    connect by level<1000
)

해당 테이블은 결국 2부터 1000까지를 출력하는 것이다.

위의 임시 테이블을 이용해서 쿼리문을 작성한다.

https://gent.tistory.com/328

listagg절을 사용했는데, 이것은 여러 행의 컬럼을 하나의 행으로 합치는 것이다.

where not exists( select 1 from prime b
                 where prime.num!=b.num
                 and mod(prime.num, b.num)=0);

그리고 prime b는 java할때로 치면 소수인지 아닌지 판별하기 위해서 2부터 점점 num까지 늘려가는 그 변수라고 생각하면 된다.

만약 prime.num%b.num이면 소수가 아니게 된다. 예를 들어 6%3은 0이므로 6은 소수가 아니다.

그리고, 자기자신과 소수는 나눠질 수 있으므로 같지 않을때를 조건으로 주었다.

그리고 위에 해당하는 것들에 포함 안된 것들이 바로 진짜 소수이다.

profile
MySQL DBA 신입

0개의 댓글