KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
# Project 테이블 기준으로 조인 후 Project_id를 기준으로 그룹화,
Project 테이블의 Project_id 기준 Employee 테이블의 experience_years 의 평균 구하기
조인하는 과정에서 null값이 생겨났으므로 COALESCE 함수로 null값을 0으로 바꿔주고,
ROUND 함수로 소수점 2번째 자리까지만 반올림하여 반환
SELECT p.project_id,
ROUND(COALESCE(AVG(e.experience_years),0),2) average_years
FROM Project p LEFT JOIN Employee e
ON p.employee_id = e.employee_id
GROUP BY p.project_id
✔️ 제출 쿼리
✔️ 쿼리 분석
# 유저들의 수를 편하게 불러오기 위해 tu라는 CTE 생성
Register 테이블과 tu 테이블을 크로스 조인 후
contest_id 기준으로 그룹화하여 등록한 유저들의 수를 총 유저 수로 나눈 뒤
100을 곱하여 비율(%) 구하기
WITH tu AS (
SELECT COUNT(*) cnt
FROM Users
)
SELECT contest_id,
ROUND((COUNT(user_id)/tu.cnt*100),2) percentage
FROM
Register r, tu
GROUP BY contest_id
ORDER BY percentage DESC, contest_id
✔️ 제출 코드
✔️ 코드 분석
# 문자열의 숫자와 영문자를 구분하기 위해 sd 라는 딕셔너리에 키:값 부여
# for문의 in에 .items() 함수를 사용해
숫자와 영문자를 키:값으로 num 과 eng 에 반복 부여
# s 문자열 안에 딕셔너리 값에 해당하는 eng가 있으면 num으로 대체
# 문자열 s 를 int(s)하여 정수형으로 변환 후 반환
def solution(s):
sd = {
'0' : 'zero',
'1' : 'one',
'2' : 'two',
'3' : 'three',
'4' : 'four',
'5' : 'five',
'6' : 'six',
'7' : 'seven',
'8' : 'eight',
'9' : 'nine',
}
for num, eng in sd.items():
if eng in s:
s = s.replace(eng, num)
return int(s)
✔️ 제출 코드
✔️ 코드 분석
# 방법을 도저히 모르겠어서 다른 사람들의 풀이 참고..
# lambda 함수를 sorted() 함수와 함께 사용하면 원하는 여러 조건으로 키 정렬이 가능하다.
# 문자열 x를 n번째 인덱스 글자를 기준으로 정렬하되, 같은 글자인 경우 문자열 x순으로 정렬
def solution(strings, n):
answer = sorted(strings, key=lambda x:(x[n],x))
return answer