본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Hacker Rank - Draw The Triangle 1, 2

by kime2 2024. 6. 20.
출처
 

Draw The Triangle 2 | HackerRank

Draw the triangle pattern using asterisks.

www.hackerrank.com

문제1

P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5)

문제에 대한 해석

P( ) 에 5를 입력하면 다음과 같이 출력된다.

20일 넣을 경우는 ?

-> * 20개를 시작으로 20행으로 1행이후 *이 1개씩 감소하다가 마지막 행에는 1개의 *이 있어야 함

 

풀이(MYSQL)

set @n = 21;
select repeat('* ', @n :=@n-1)
from information_schema.tables
limit 20;

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. SET : @n을 통해 사용자 변수를 설정한다. 이때 @n을 출력할 경우 21 출력
  2. FROM 절:  information_schema.tables에서 메타 데이터를 가져옴
  3. SELECT 절: repeat함수를 사용하여 *를 @n번 반복하는데 @n :=@n-1을 통해 -1씩 반복적인 값을 저장한다

 

문제2

P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5):

 

풀이(MYSQL)

set @n = 0;
select repeat('* ',@n := @n+1)
FROM INFORMATION_SCHEMA.TABLES
limit 20;

 

다른사람 풀이

https://geuljeok.tistory.com/entry/SQL%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-Draw-The-Triangle-1-SET-REPEAT

 

[SQL][해커랭크] Draw The Triangle 1 / SET @, REPEAT

https://www.hackerrank.com/challenges/draw-the-triangle-1/problem?isFullScreen=true Draw The Triangle 1 | HackerRankDraw the triangle pattern using asterisks.www.hackerrank.com 문제P(R) represents a pattern drawn by Julia in R rows. The following patte

geuljeok.tistory.com

with recursive cte as (
	select 20 as num
    union all
    select
     num-1 from cte
     where num > 0
)

select repeat('* ', num)
from cte



with recursive cte as (
	select 1 as num
    union all
    select num+1 from cte
    where num < 20 )
  
 select repeat('* ', num)
 from cte



배운점

  • repeat(문자열, 반복할 횟수)
  • @n  = 21로 할당하는 이유

repeat를 통해 반복할때 1행은 20개의*이 나와야 한다

그러나 @n :=@n-1로 @n보다 1작은 수를 출력하기 때문에 20개가 나오기 위해서는 21로 처음에 지정해야 한다

마찬가지고 2번의 경우 1행에 1개가 나와야 하기 때문에 @n :=@n+1로 @n보다 1개 더 많이 출력하는 것을 고려하여 @n을 0으로 할당한다

 

  • limit의 사용 : 몇번까지 반반복하나는 지정문이 없으면 *가 0개 출력하더라도 계속 행이 생성된다. 따라서 limit을 통해 행을 끊어주는 게 필요
limit 사용 limit미사용