https://www.hackerrank.com/challenges/draw-the-triangle-1/problem?isFullScreen=true
P(R)은 줄리아가 R개의 행으로 그린 패턴을 나타냅니다. 다음 패턴은 P(5)를 나타냅니다:
* * * * *
* * * *
* * *
* *
*
패턴 P(20)을 출력하는 쿼리를 작성하세요.
SET @n = 20;
@n이이라는 변수를 생성하고 20을 저장한다.
WITH RECURSIVE cte AS (
SELECT @n AS num
UNION ALL
SELECT num - 1
FROM cte
WHERE num > 1
)
with 구문을 통해서 위의 서브쿼리를 cte라고 정의한다. 해당 서브쿼리는 num라는 열에 @n라는 값(최초에는 20) 값을 가진다. 그리고 union all로 기존의 cte쿼리의 num열의 값에 -1을 한 값과 결합을 한다. 그리고 그것을 현재의 num값(num-1이 된 상태이므로 0이 될때까지) 결합하여 num이라는 열에 20, 19, ... , 2, 1이라는 값들을 가지는 테이블을 CTE로 정의한다.
원래 해당사이트에서는 버전문제로 with 구문을 사용할 수 없었지만, 이 문제에서는 버전이 8.3.23으로 with 구문을 사용할 수 있었다.
-- SET @n = 20;
-- WITH RECURSIVE cte AS (
-- SELECT @n AS num
-- UNION ALL
-- SELECT num - 1
-- FROM cte
-- WHERE num > 1
-- )
SELECT * FROM cte;
위에서 작성한 cte테이블을 출력하면 20, 19, ... , 2, 1이 출력되는 것을 확인 할 수 있다.
-- SET @n = 20;
-- WITH RECURSIVE cte AS (
-- SELECT @n AS num
-- UNION ALL
-- SELECT num - 1
-- FROM cte
-- WHERE num > 1
-- )
-- SELECT
repeat('* ', num)
-- FROM cte;
repeat을 사용해서 *이라는 문자를 현재 열의 num값 만큼 반복하면 완료!\
'코딩일기' 카테고리의 다른 글
알고리즘 코드카타 122 - 테이블 해시 함수 (0) | 2024.08.08 |
---|---|
알고리즘 코드카타 121 - 시소짝꿍 (0) | 2024.08.06 |
코딩테스트 연습 - 게리맨더링 (0) | 2024.08.04 |
SQL 코드카타 180 - 15 Days of Learning SQL (0) | 2024.08.02 |
SQL 코드카타 179 - Interviews (0) | 2024.07.31 |