KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT A.CAR_ID,
A.CAR_TYPE,
ROUND(DAILY_FEE * 30 * (1-DISCOUNT_RATE*0.01),0) FEE
FROM (
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE IN ('세단', 'SUV')
) A LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN B
ON A.CAR_TYPE = B.CAR_TYPE AND DURATION_TYPE = '30일 이상'
WHERE CAR_ID NOT IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE ("2022-11-01" BETWEEN START_DATE AND END_DATE)
OR ("2022-11-30" BETWEEN START_DATE AND END_DATE)
)
GROUP BY CAR_ID
HAVING FEE >= 500000 AND FEE < 2000000
ORDER BY FEE DESC, A.CAR_TYPE, A.CAR_ID DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
WITH TR AS (
SELECT CC.CAR_ID CI,
CC.CAR_TYPE CT,
CC.DAILY_FEE CF,
RH.HISTORY_ID HI,
RH.START_DATE SD,
RH.END_DATE ED,
(DATEDIFF(RH.END_DATE, RH.START_DATE) + 1) P
FROM CAR_RENTAL_COMPANY_CAR AS CC
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS RH
ON CC.CAR_ID = RH.CAR_ID
WHERE CC.CAR_TYPE LIKE '트럭'
),
TRDC AS (
SELECT (1-DISCOUNT_RATE*0.01) DR,
DURATION_TYPE DT
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE CAR_TYPE = '트럭'
)
SELECT TR.HI HISTORY_ID,
ROUND(TR.CF * TR.P *
CASE WHEN TR.P >= 90 THEN (SELECT DR FROM TRDC
WHERE DT = '90일 이상')
WHEN TR.P BETWEEN 30 AND 89 THEN (SELECT DR FROM TRDC
WHERE DT = '30일 이상')
WHEN TR.P BETWEEN 7 AND 30 THEN (SELECT DR FROM TRDC
WHERE DT = '7일 이상')
ELSE 1 END, 0) FEE
FROM TR
ORDER BY FEE DESC, HISTORY_ID DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT DATE_FORMAT(OS.SALES_DATE,"%Y") YEAR,
DATE_FORMAT(OS.SALES_DATE,"%m") MONTH,
COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS,
ROUND(COUNT(DISTINCT OS.USER_ID)/
(SELECT COUNT(DISTINCT USER_ID)
FROM USER_INFO
WHERE DATE_FORMAT(JOINED,"%Y") = '2021'
),1) PURCHASED_RATIO
FROM ONLINE_SALE OS LEFT JOIN USER_INFO UI
ON OS.USER_ID = UI.USER_ID
WHERE DATE_FORMAT(UI.JOINED,"%Y") = '2021'
GROUP BY DATE_FORMAT(OS.SALES_DATE,"%Y"), DATE_FORMAT(OS.SALES_DATE,"%m")
ORDER BY YEAR, MONTH
✔️ 제출 코드
✔️ 코드 분석
def solution(arr):
if len(arr)==1: # arr 길이가 1인 경우
return [-1] # -1 반환
arr.remove(min(arr)) # arr 에서 최소값 제거
return arr
✔️ 제출 코드
✔️ 코드 분석
def solution(s):
if len(s) % 2 == 0:
return s[int(len(s)/2)-1:int(len(s)/2)+1]
else:
return s[int(len(s)/2)]
✔️ 제출 코드
✔️ 코드 분석
def solution(n):
list = []
for i in range(n):
if i % 2 == 0:
list.append('수')
else:
list.append('박')
return list
def solution(n):
list = []
for i in range(n):
if i % 2 == 0:
list.append('수')
else:
list.append('박')
return (''.join(list))
ROUND(TR.CF * TR.P *
CASE WHEN TR.P >= 90 THEN (SELECT DR FROM TRDC
WHERE DT = '90일 이상')
WHEN TR.P BETWEEN 30 AND 89 THEN (SELECT DR FROM TRDC
WHERE DT = '30일 이상')
WHEN TR.P BETWEEN 7 AND 30 THEN (SELECT DR FROM TRDC
WHERE DT = '7일 이상')
ELSE 1 END, 0) FEE