[SQL] 해커랭크: Alternative Queries 문제풀이

juyeon·2022년 12월 20일
0

SQL

목록 보기
7/9
post-thumbnail

Easy

1. Draw The Triangle 1

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

풀이

  • 어떤 테이블을 써야지?
    : MySQL의 기본 테이블인 information_schema 사용
  • 숫자가 감소하는 칼럼 하나 만들어주기
    : SET @변수명 = 값
  • 1개씩 *이 줄어들어야함
  • P(20)이므로, 20까지 제한
SET @number = 21;
SELECT REPEAT('* ', @number := @number - 1) 
FROM information_schema.tables
LIMIT 20;

2. Draw The Triangle 2

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

풀이

  • Draw The Triangle 1와 99% 같은 코드
    : 0부터 시작해서, +1 ~ 20까지. 총 20번의 *
SET @number = 0;
SELECT REPEAT('* ', @number := @number + 1) 
FROM information_schema.tables
LIMIT 20;

Medium

1. Print Prime Numbers ⭐

Write a query to print all prime numbers less than or equal to . Print your result on a single line, and use the ampersand () character as your separator (instead of a space).

For example, the output for all prime numbers would be:

2&3&5&7

풀이

  • 양심고백..'prime number'가 소수라는거.. 몰랐음..ㅎ
  • 1000보다 작거나 같은(=이하) 소수 출력하기. 사이에 & 넣기
  • 파이썬으로는 알겠는데, 어떻게 코드를 짜지?

다른 사람 풀이

SELECT GROUP_CONCAT(NUMB SEPARATOR '&')
FROM (
    SELECT @num:=@num+1 as NUMB FROM
    information_schema.tables t1,
    information_schema.tables t2,
    (SELECT @num:=1) tmp
) tempNum
WHERE NUMB<=1000 AND NOT EXISTS(
    SELECT * FROM (
        SELECT @nu:=@nu+1 as NUMA FROM
            information_schema.tables t1,
            information_schema.tables t2,
            (SELECT @nu:=1) tmp1
            LIMIT 1000
        ) tatata
    WHERE FLOOR(NUMB/NUMA)=(NUMB/NUMA) AND NUMA<NUMB AND NUMA>1
);
  • GROUP_CONCAT : 구분자 삽입

질문

  1. information_schema.tables을 두개로 한 이유?
    1개만 하면 1000개 이하로 출력되기 때문이라는데, 만약 1억개 등 더 많은 숫자가 나타날때도 테이블 두개면 충분할까?
profile
내 인생의 주연

0개의 댓글