[스파르타코딩클럽]데이터분석 과정/SQL

[SQL 코드카타] 181~183번(HackerRank)

doo_ 2024. 2. 1. 15:33

181번 Draw The Triangle 1

> Set 함수에 대한 이해 부족으로 해답 참고

So, set 함수 복습 및 활용법 이해

SET @num = 21;
SELECT 
	repeat('* ', @num := @num - 1) 
FROM
	information_schema.tables 
-- 임시로 사용되는 테이블로 횟수에 따라 반복되는 간단한 작업을 수행할 때 사용
WHERE
	@num > 1;

> with recursive문에 대해서 배움

WITH RECURSIVE rnum AS -- 아래 as n 대신 rnum(n)으로도 가능
    (SELECT 20 AS n 
     UNION ALL
     SELECT n-1
     FROM rnum
     WHERE n > 1)
SELECT 
    REPEAT('* ', n)
FROM 
    rnum;

> 프로시저 생성 방법

DELIMITER :: -- 구분자 변경
CREATE PROCEDURE dstar() -- 프로시저 생성
BEGIN -- BEGIN ~ END 
    DECLARE i INT DEFAULT 20; 
    WHILE i>0 DO -- WHILE ~ END WHILE
    SET @counter = REPEAT('* ',i);
    SELECT @counter;
    SET i = i-1;
    END WHILE;
END;
::
Delimiter ;
call dstar();

 

182번 Draw The Triangle 2

> 181번의 반대로

SET @num = 0;
SELECT 
    repeat('* ', @num := @num + 1) 
FROM
    information_schema.tables 
WHERE
    @num < 20;

 

183번 Print Prime Numbers

> 파이썬을 통해서 소수 판별은 알지만, SQL은 익숙하지 않아서 결국 해답 참고...

SELECT GROUP_CONCAT(NUMB SEPARATOR '&')
FROM (
    SELECT @num := @num + 1 as NUMB 
    FROM
        information_schema.tables t1,
        information_schema.tables t2,
        (SELECT @num := 1) tmp
    WHERE @num <= 1000
    ) tempNum
WHERE NOT EXISTS(SELECT * 
                FROM (SELECT 
                        @nu := @nu + 1 as NUMA 
                     FROM
                        information_schema.tables t1,
                        information_schema.tables t2,
                        (SELECT @nu := 1) tmp1
                        LIMIT 500
                     ) con
                WHERE FLOOR(NUMB/NUMA)=(NUMB/NUMA) AND NUMA<NUMB AND NUMA>1
                )