KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT FH.FLAVOR
FROM FIRST_HALF FH JOIN ICECREAM_INFO II
ON FH.FLAVOR = II.FLAVOR
WHERE FH.TOTAL_ORDER > 3000
AND II.INGREDIENT_TYPE = 'fruit_based'
ORDER BY FH.TOTAL_ORDER DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
# 재구매에 대한 정의를 제대로 이해하지 못해 시간이 오래 걸렸던 문제..
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY 1, 2 DESC;
✔️ 제출 쿼리
✔️ 쿼리 분석
# CONCAT 함수와 SUBSTR 함수를 활용해 원하는 문장 배열이 가능한 것을 보여주는 문제
SELECT U.USER_ID,
U.NICKNAME,
CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소,
CONCAT(SUBSTR(U.TLNO,1,3), '-', SUBSTR(U.TLNO,4,4), '-',
SUBSTR(U.TLNO,8,4)) 전화번호
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY B.WRITER_ID DESC
# 정규 표현식을 활용해 대체하는 방법도 확인했다.
SELECT U.USER_ID,
U.NICKNAME,
CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소,
-------------------------------------------
REGEXP_REPLACE(U.TLNO, '(.{3})(.{4})(.{4})', '$1-$2-$3') 전화번호
- REGEXP_REPLACE(원본 문자열 칼럼, 정규표현식 패턴, 치환할 문자열)
- U.TLNO 칼럼에서 (.(첫번째부터) {3}(세번째까지))
(.(그다음부터) {4}(네번째까지))
(.(그다음부터) {4}(네번째까지))
'$1(1번째 그룹) - $2(2번째 그룹) - $3(3번째 그룹)' 형태로 치환
-------------------------------------------
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY B.WRITER_ID DESC
✔️ 제출 코드
✔️ 코드 분석
def solution(n): - (n을 매개로 하는 solution 함수 정의)
sum = 0 - (0으로 초기화한 sum 변수 생성)
for i in range(1, n+1): - (1~n 범위로 하는 i를 반복)
if n % i == 0: - (n을 i로 나눈 몫이 0이면)
sum += i - (sum 변수에 i를 더한다.)
return sum - (sum 반환)
✔️ 제출 코드
✔️ 코드 분석
# n을 x로 나누었을 적어도 n-1에서는 나누어진다. 그러므로 n-1까지 진행한다.
최소의 x를 찾는 것이 목적이므로 n의 범위인 2부터 n-1까지 나머지를 확인하다 중간에 나머지가 1인 경우 더 이상 계산하지 않는다.
def solution(n): - (n을 매개로 하는 solution 함수 정의)
for x in range (2,n): - (2~n-1 범위로 하는 x를 반복) / n이 3부터 시작하기 때문
if (n % x == 1): - (n 을 x 로 나눈 나머지가 1일 때)
return x - (x값 반환)
✔️ 제출 코드
✔️ 코드 분석
def solution(x,n): - (x와 n을 매개로 하는 solution 함수 정의)
result = [x*i for i in range(1,n+1)] - (x에 i를 곱한 값들의 리스트, i의 범위는 1부터 n까지)
return result