문제
P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5):
* * * * *
* * * *
* * *
* *
*
Plain Text
복사
Write a query to print the pattern P(20).
정답
SET @r1 = 21;
SELECT REPEAT('* ', @r1 := @r1-1)
FROM information_schema.tables
WHERE @r1 > 1;
SQL
복사
풀이
•
전역변수와 REPEAT의 사용법을 묻는 문제이다.
•
우선 전역 변수로 21의 값을 갖는 변수를 생성한다.
SET @r1 = 21;
SQL
복사
•
그 다음 REPEAT을 활용해서 전역변수 값의 -1만큼 ‘* ‘를 출력한다. (이때 공백이 있어야 함)
SELECT REPEAT('* ', @r1 := @r1-1)
SQL
복사
•
FROM 절에서는 참조할 수 있는 더미 테이블이 필요하다. 더미 테이블을 참조하지 않으면 SELECT가 한 번만 작동하고 끝나버리기 때문에 반드시 필요.
FROM information_schema.tables
SQL
복사
•
마지막으로 r1이 1 초과일때까지만 돌아가게 해야 별이 하나까지 출력되고 끝난다.
•
WHERE절이 SELECT절보다 먼저 수행되기 때문.
•
즉, r1=2 인 경우 WHERE 절 조건을 만족하고 REPEAT(’* ‘, 1) 을 수행한다.
•
r1=1인 경우 WHERE 절 조건을 만족하지 못하므로 반복문이 끝난다.
WHERE @r1 > 1;
SQL
복사