출처
문제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 ->결과반환
- SET : @n을 통해 사용자 변수를 설정한다. 이때 @n을 출력할 경우 21 출력
- FROM 절: information_schema.tables에서 메타 데이터를 가져옴
- 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;
다른사람 풀이
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미사용 |
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 프로그래머스 - 특정 세대의 대장균 찾기 (0) | 2024.06.24 |
---|---|
[문제풀이] 프로그래머스 - 연간 평가점수에 해당하는 평가 등급 (0) | 2024.06.24 |
[문제풀이] Hacker Rank - Symmetric Pairs (0) | 2024.06.19 |
[문제풀이] Hacker Rank - Placements (1) | 2024.06.18 |
[문제풀이] Hacker Rank - Challenges (1) | 2024.06.18 |