[해커랭크] Draw The Triangle 1, 2

june·2023년 4월 23일
0

SQL

목록 보기
19/31

Draw The Triangle 1

https://www.hackerrank.com/challenges/draw-the-triangle-1

  • P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5):
    * * * * *
    *
    * * *
    *
    * *
    *
    *
    *
    Write a query to print the pattern P(20).
SET @row_num = 20;
SELECT
    IF(@row_num := @row_num - 1, REPEAT('* ', @row_num + 1), '*')
FROM information_schema.tables

Lesson & Learned

  • SET 문을 사용하여 변수 @row_num을 20으로 초기화. 이 변수는 출력할 행의 수. @는 MySQL에서 사용자 정의 변수(값을 저장하고 변수를 참조) 시작하는 기호
  • IF 문은 @row_num - 1 > 0 (참인 경우)에는 REPEAT()의 결과를 반환하고, 거짓인 경우에는 '*' 문자열을 반환
  • := 는 MySQL에서 변수에 값을 할당하는 연산자
  • FROM information_schema.tables 는 MySQL에서 제공하는 시스템 카탈로그
-- solution 2
WITH RECURSIVE P AS(
    SELECT 20 AS n      -- 초기값 설정
    UNION ALL           -- 위 쿼리와 아래 쿼리를 연산
    SELECT n-1 FROM P   -- 하나씩 불러옴
    WHERE n > 0         -- 반복 종료 조건
)
SELECT REPEAT('* ', n) FROM P


-- solution 3
SELECT REPEAT('* ', 21 - (row_number() over()))
FROM information_schema.tables 
LIMIT 20
-- RECURSIVE

WITH RECURSIVE cte_name AS (
  initial_query  -- anchor member
  UNION ALL
  recursive_query -- recursive member that references to the CTE name
)
SELECT * FROM cte_name

코드 참고(수림님)

Draw The Triangle 2

https://www.hackerrank.com/challenges/draw-the-triangle-2

  • P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5):
    *
    * *
    *
    * *
    *
    * * *
    *
    * * * *
    Write a query to print the pattern P(20).
SET @row_num = 0;
SELECT
    IF(@row_num := @row_num + 1, REPEAT('* ', @row_num), '')
FROM information_schema.tables
LIMIT 20

Lesson & Learned

-- solution 2
WITH RECURSIVE P AS(
    SELECT 1 AS n        -- 초기값 설정
    UNION ALL            -- 위 쿼리와 아래 쿼리를 연산
    SELECT n + 1 FROM P  -- 하나씩 불러옴
    WHERE n < 20         -- 반복 종료 조건
)
SELECT REPEAT('* ', n) FROM P
profile
나의 계절은

0개의 댓글