코딩테스트/SQL 코드카타

MySQL 해커랭크 | Draw The Triangle ( *로 (역)직각삼각형 만들기, SQL식 반복문 >> 재귀쿼리, 재귀함수, REPEAT함수)

ANNASENA 2024. 8. 30. 08:00
728x90

 

직각삼각형 만들기 문제

https://www.hackerrank.com/challenges/draw-the-triangle-2/problem?isFullScreen=true

 

Draw The Triangle 2 | HackerRank

Draw the triangle pattern using asterisks.

www.hackerrank.com

  • P(R) represents a pattern drawn by Julia in R rows.
  • Write a query to print the pattern P(20)

 

# 직각삼각형 예시 P(5)

P(5)

 

풀이과정

  • 재귀쿼리REPEAT 함수로 풀 수 있음
    • 재귀쿼리 → WITH RECURSIVE 테이블명 AS( )
    • REPEAT 함수 → * 기호의 반복 횟수 +1씩 늘리면서 20보다 커지지 않을 만큼 재귀쿼리를 돌리게 함

▶ WITH RECURSIVE 재귀쿼리

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-RECURSIVE-%EC%9E%AC%EA%B7%80-%EC%BF%BC%EB%A6%AC

 

[MYSQL] 📚 RECURSIVE (재귀 쿼리)

WITH RECURSIVE 문 (재귀 쿼리) 프로그래밍에서 재귀 함수를 들어봤듯이, SQL에서도 재귀 쿼리 기법이 존재한다. 다만 문법이 굉장히 해괴한데 우선 WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해

inpa.tistory.com

 

▶ REPEAT, REVERSE 함수

  • REPEAT('문자열', 반복횟수)
  • REVERSE('문자열')

https://blog.naver.com/kkh0977/222479879846

 

36. (MYSQL/SQL) REPEAT , REVERSE 사용해 문자열 반복 출력 및 문자열 거꾸로 출력 실시

[개발 환경 설정] 개발 툴 : Heidi 개발 언어 : Mysql [소스 코드] [결과 출력] [요약 설명] /* [REP...

blog.naver.com

 

# 정답 : P(20) 만들기

1
2
3
4
5
6
7
8
9
10
11
WITH RECURSIVE pat AS(
    SELECT 1 AS st
    UNION
    SELECT st + 1
    FROM pat
    WHERE st < 20
)
 
SELECT REPEAT('* ', st)
FROM pat
-- 오답 : EXISTS(SELECT * FROM pn ppn WHERE (ppn.st <= SQRT(pn.st)) AND (pn.st % ppn.st  != 0))
cs


 

역 직각삼각형 만들기 문제

https://www.hackerrank.com/challenges/draw-the-triangle-1/problem?isFullScreen=true

 

Draw The Triangle 1 | HackerRank

Draw the triangle pattern using asterisks.

www.hackerrank.com

  • P(R) represents a pattern drawn by Julia in R rows.
  • Write a query to print the patternP(20).

 

# 직각삼각형 예시 P(5)

P(5)

 

풀이과정

  • 위에서 직각삼각형을 만든 것을 응용해서 이번엔 재귀 쿼리 규칙을 
    * 기호의 반복 횟수-1씩 줄이면서 0보다 작아지지 않을 만큼 재귀쿼리를 돌리게 함

# 정답 : P(20) 만들기

1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE pat AS(
    SELECT 20 AS ed
    UNION
    SELECT ed - 1
    FROM pat
    WHERE ed > 0
)
 
SELECT REPEAT('* ', ed)
FROM pat
cs

 


# 더 알아보기 : @ROWNUM := @ROWNUM + 1

  • 초기화 → SET @ROWNUM := 0
  • 조회   SELECT @ROWNUM := @ROWNUM+1, 테이블명.*

 

https://developer-jjun.tistory.com/23

 

[MySQL] ROWNUM을 사용하여 번호매기기

MySQL에서 Oracle처럼 ROWNUM 사용법 SET구문을 사용하여 ROWNUM 값을 초기화 후 조회 SET @rownum:=0; SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE절에서 초기화 SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE (@rown

developer-jjun.tistory.com

 

https://developer-jjun.tistory.com/23

 

[MySQL] ROWNUM을 사용하여 번호매기기

MySQL에서 Oracle처럼 ROWNUM 사용법 SET구문을 사용하여 ROWNUM 값을 초기화 후 조회 SET @rownum:=0; SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE절에서 초기화 SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE (@rown

developer-jjun.tistory.com

728x90