해커랭크 [Print Prime Numbers]

윤태영·2024년 8월 28일
0

문제

https://www.hackerrank.com/challenges/print-prime-numbers/problem?isFullScreen=true

  • 1000보다 작거나 같은 모든 소수를 출력하는 쿼리를 작성하기

  • 결과를 한 줄에 인쇄하고 "&"를 구분 기호로 사용한다

  • prime number(소수) : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수

문제풀이

<GROUP_CONCAT 함수>

1) GROUP_CONCAT은 My SQL에서 GROUP BY로 문자열을 합칠 때 사용한다

2) 사용방법

  • 기본 : GROUP_CONCAT(대상컬럼)

  • 구분자 변경 : GROUP_CONCAT(대상컬럼 SEPARATOR '구분자')

  • 문자열 정렬 : GROUP_CONCAT(대상컬럼 ORDER BY 대상컬럼)


  1. 재귀문을 사용하여 2~ 999까지 숫자를 생성한다

  2. SELECT GROUP_CONCAT(A.NUM SEPARATOR '&'): 하나의 문자열로 구분하고 '&'로 나눠준다

  3. WHERE 절을 사용하여 소수가 아닌 수를 제외한다

-A.NUM % B.NUM = 0 : A.NUM과 B.NUM의 나눈 나머지가 0이면 소수가 아니다.

-A.NUM != B.NUM: 같은 숫자끼리 나누면 무조건 나머지가 0이 나온다. 그래서 같은 숫자는 제외해야한다.

쿼리

WITH RECURSIVE CTE AS (
    SELECT 2 AS NUM
    UNION ALL
    SELECT NUM + 1
    FROM CTE
    WHERE NUM < 1000
)

SELECT GROUP_CONCAT(A.NUM SEPARATOR '&')
FROM CTE A
WHERE NOT EXISTS(
    SELECT B.NUM
    FROM CTE B
    WHERE A.NUM % B.NUM = 0
    AND A.NUM != B.NUM
)
profile
ice blue

0개의 댓글