본문 바로가기
데이터/SQL 문제풀이

HackerRank SQL - Draw The Triangle 1, 2

by 찌노오 2023. 1. 25.

 

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).

Problem

패턴 P(20)을 출력하는 쿼리을 작성하라.

(패턴 P는 행의 갯수만큼 '*'를 반복해서 출력함)


Answer1

WITH RECURSIVE my_cte AS
(
  SELECT 1 AS n
  UNION ALL
  SELECT 1+n FROM my_cte WHERE n<20 
)
SELECT repeat('* ', 21-n) FROM my_cte;

 

 


How to solve

일명 '별 찍기' 문제로 반복문이 있는 언어에서는 그렇게 어렵진 않은데,

Mysql에서는 재귀나, 변수를 만들어 해결해야 한다.

WITH RECURSIVE my_cte AS
(
  SELECT 1 AS n
  UNION ALL
  SELECT 1+n FROM my_cte WHERE n<20 
)

아래 없는 시간 표시하는 방법에서 썼던 방법을 활용했다.

2022.10.26 - [데이터/SQL] - [MySQL] 없는 시간 표시하기(재귀적 CTE)

 

별을 찍으면서 내려오려면, 특정 수만큼 문자를 반복해야되니 아래과 같은 함수를 활용한다.

 

repeat(str, count)

문자열을 count만큼 반복하여 반환하는 함수

count가 1보다 작다면 공백을 반환하고 str나 count가 NULL이면 NULL을 반환한다.

 

SELECT repeat('* ', 21-n) FROM my_cte;

조심해야 되는 점은 '*'이 공백이 있다는 점이다.

 

그리고 Draw The Triangle 2는 반대로라서 별의 개수를 늘리는 거라서 21-n 대신 n을 넣으면 된다. 

 

 

 

 

 

 

반응형

댓글