SQL

[Hacker Rank] SQL_Intermediate_Medium (재귀함수/REPEAT)

jjanggun0930 2025. 1. 30. 21:44

난이도 : 중하

소요시간 : 20분

 

앞에서 재귀함수로 골머리를 앓고 드디어 나온 재귀함수 문제 ! 

함수 작성은 약간 책의 도움을 받긴 했지만, 그래도 스스로 변수에 맞춰서 수정완료 ㅎ 

설명을 하자면, p라는 함수에는 n 컬럼 존재, 처음엔 1 과 union으로 자기 스스로 값에 +1을 덧붙이게 됨. 

=> 컬럼 n 출력하면,

=> 1

     2

     3

     4

........ 이런식으로 출력될 것임. 

문제는 숫자가 아닌 문자열을 갯수만큼 나오게 하는, 파이썬의 피라미드 세우기 같은 형태니까, 문자열*숫자로 출력진행

with recursive p (n)
as (
	select 1
	union all
	select (n+1) from p where n<5
    )

select ('*')*n from p;

=> 얘는 자꾸 

0

0

0

0

0

이렇게 출력 됨. 알아보니 SQL에서 (문자열 * 숫자)는 문자열을 0으로 인식해서 항상 0값이 나오는 것. 

 

그렇다면, ('*')*n 이부분을 고쳐야 하는데,,,, 뭔가 SQL 언어가 있을 것 같아서 책의 도움을 빌렸슴둥..ㅎ(*DO it SQL 입문)


+ 교재에 따르면, 

"문자를 반복하는 함수 - REPEAT"

  • REPEAT 함수는 지정한 문자를 반복할 때 사용한다. 이때, 반복할 문자와 반복 횟수를 인자로 전달하면 된다. 
  • ex) select repeat('p', 10) ;     ->      pppppppppp 출력 !  

[정답 코드]

with recursive p (n)
as (
	select 1
	union all
	select ((n+1)) from p where n<20)

select repeat('* ',n) 
from p
order by n desc;