KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
# 문제: 전체 플레이어 수 중 이틀 연속으로 로그인한 플레이어 비율 조회
# 플레이어들의 최초 로그인 테이블을 인라인 뷰로 생성 후,
# 원래 테이블과 player_id가 같고 최초 로그인 날짜와 로그인 날짜가 같으며,
# DATEDIFF로 날짜의 차이가 1일 (즉, 연속 로그인)인 데이터를 조건으로 INNER JOIN 후,
# 전체 플레이어 수(서브쿼리로 새로 불러오기)에서 조건에 맞는 플레이어 수를 나누어
# 소수점 2번째 자리까지 반올림 후 표현한 데이터 조회
SELECT ROUND(COUNT(DISTINCT a1.player_id) /
(SELECT COUNT(DISTINCT player_id) FROM Activity), 2) fraction
FROM Activity a1 INNER JOIN
(
SELECT player_id,
MIN(event_date)min_date
FROM Activity
GROUP BY player_id
) a2
ON a1.player_id = a2.player_id
AND DATEDIFF(a1.event_date, a2.min_date) = 1
✔️ 제출 쿼리
✔️ 쿼리 분석
# 문제: 선생님 별 담당한 고유 과목 수 조회
# 갑자기 문제 난이도 급 하향조정?
# teacher_id 별로 그룹화 후 subject_id에 DISTINCT 한 데이터 COUNT
SELECT teacher_id,
COUNT(DISTINCT subject_id) cnt
FROM Teacher
GROUP BY teacher_id
✔️ 제출 코드
✔️ 코드 분석
# 문제: food라는 리스트에서 food[i]는 i번 음식의 수를 나타내고,
# 인덱스 0은 물을 나타내서 항상 1,
# 다음 인덱스 1 부터 음식 1을 나타내고 해당 인덱스의 값이 음식의 수를 나타낸다.
# 음식의 수가 절반으로 나누어 떨어지는 갯수만 대회에 사용하고,
# 앞에서부터 물(0)까지, 그 순서를 반대로 이어붙여 문자열로 나타내기
# 음식 수를 절반으로 나누어 떨어지는 갯수만 음식번호만큼 표현할 answer2 변수 생성
# enumerate()를 반복문으로 사용해 음식 번호와 갯수로 나누기
# 참고! 문자열에 숫자를 곱하면 해당 문자열을 곱한 숫자만큼 복사
# 인덱스가 0인 값은 물이므로 제외하고 1부터 끝까지 반복하여
# str(i+1) = 음식 번호를 문자열로 변환
# * (f//2) = 음식 갯수를 절반으로 나누어 떨어지는 수만큼 곱하기
# str(i+1) * (f//2) = 음식 번호를 음식 갯수 절반으로 떨어지는 수만큼 표시
# answer2 에 문자열로 생성
# answer 에 answer2 + 0 + answer2(역슬라이싱으로 거꾸로 출력) 문자열 추가
def solution(food):
answer2 = ''
for i, f in enumerate(food[1:]):
answer2 += str(i+1) * (f//2)
answer = answer2 + '0' + answer2[::-1]
return answer
✔️ 제출 코드
✔️ 코드 분석
def solution(a, b, n):
answer = 0
# 빈 병의 갯수가 a 갯수 이상일 때까지 반복
while n >= a:
# n // a : 현재 보유 중인 빈 병(n)으로 얻을 수 있는 콜라 병 수
# (n // a) * b : 빈 병을 가져다주고 받아오는 콜라 병 수
answer += (n // a) * b
# 새로 받은 콜라 병 수만큼 다시 빈 병의 수에 추가
# (n // a) * b: 새로 받은 콜라로 인해 생긴 새로운 빈 병의 수
# n % a: 보유 중인 빈 병 중 교환 후 남은 병의 수
# 교환 후 남은 빈 병과 새로 받은 콜라를 마시고 생긴 빈 병의 수를 합쳐
# n 으로 초기화
n = (n % a) + (n // a) * b
return answer