[SQL]

HackerRank 코딩 테스트 - Print Prime Numbers(LV.Medium)

indongspace 2024. 10. 19. 08:00

 

 

 

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:

쿼리를 작성하여 모든 소수를 1000 이하로 인쇄합니다. 한 줄로 결과를 인쇄하고 공백 대신 앰퍼샌드 (&) 문자를 구분 기호로 사용합니다.
예를 들어, 모든 소수 <= 10의 출력은 다음과 같습니다:

2&3&5&7

 

 

SELECT GROUP_CONCAT(NUMB SEPARATOR '&') # 구분자 &으로 이어붙이기
FROM (SELECT @num:=@num+1 AS NUMB
      # 주어진 테이블이 없기 때문에 모든 데이터베이스에 기본적으로 적재되어 있는 information_schema를 사용. 
      FROM information_schema.tables t1, # CROSS JOIN의 형태로 테이블 행을 늘린다.
           information_schema.tables t2,
           (SELECT @num:=1) tmp # 변수선언. 기본값 저장
      ) AS tempNum
WHERE NUMB <= 1000
# 소수를 걸러내기 위한 쿼리
AND NOT EXISTS (SELECT *
                FROM (SELECT @nu:=@nu+1 AS NUMA
                      FROM information_schema.tables t1,
                           information_schema.tables t2,
                           (SELECT @nu:=1) tmp1
                      LIMIT 1000
                      ) AS tempNum1
                # NUMA가 NUMB의 약수일 경우만 참
                WHERE FLOOR(NUMB/NUMA) = (NUMB/NUMA)
                AND NUMA < NUMB 
                AND 1 < NUMA # 1보다 큰 자연수
               )