KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT SUM(POPULATION)
FROM CITY
GROUP BY DISTRICT
HAVING DISTRICT = 'California'
✔️ 제출 코드
✔️ 코드 분석
def solution(progresses, speeds):
answer = [] # 배포별 완료된 작업 수를 저장할 리스트
# 작업 중인 경우 반복
# speeds가 빈 배열이 될 때까지 반복 후, False 반환
while speeds:
# 각 작업의 하루 진도 업데이트
for i, speed in enumerate(speeds):
progresses[i] += speed
count = 0 # 배포할 작업 수를 세는 변수
# 맨 앞 작업 진도가 100% 이상이 되면,
# progresses와 speeds 리스트에서 해당 작업을 제거하고
# 배포 작업 수 count 증가
# progresses가 빈 배열이 될 때까지 반복 후, False 반환
while progresses and progresses[0] >= 100:
del progresses[0], speeds[0]
count += 1
# 배포될 작업 수를 결과 리스트에 추가
if count > 0:
answer.append(count)
return answer
+)
남은 일수를 먼저 계산 후 배포 묶음 계산하기
def solution(progresses, speeds):
from math import ceil
# 각 기능이 완료되기까지 남은 일수 계산
# zip(progresses, speeds) 함수로 각 기능의 진도와 속도 매핑
# ceil((100 - progress) / speed)로
# 각 기능이 완료되기까지 남은 일수 계산, ceil로 올림 처리
days_left = [
ceil((100 - progress) / speed)
for progress, speed in zip(progresses, speeds)
]
result = []
# 남은 일수로 반복
while days_left:
# 첫 번째 기능의 남은 일수를 기준으로 묶음 시작
current_day = days_left.pop(0)
count = 1
# 현재 기준보다 일찍 끝나는 기능들을 함께 묶음
while days_left and days_left[0] <= current_day:
days_left.pop(0)
count += 1
result.append(count)
return result
SQL
GROUP BY
와 HAVING
으로 원하는 조건 후 집계 (SUM
)# HAVING 조건절 GROUP BY 와 집계 함수(SUM)
SELECT SUM(POPULATION)
FROM CITY
GROUP BY DISTRICT
HAVING DISTRICT = 'California'
PYTHON
남은 일수를 먼저 계산 후 배포 묶음 계산하기
def solution(progresses, speeds):
from math import ceil
# 각 기능이 완료되기까지 남은 일수 계산
# zip(progresses, speeds) 함수로 각 기능의 진도와 속도 매핑
# ceil((100 - progress) / speed)로
# 각 기능이 완료되기까지 남은 일수 계산, ceil로 올림 처리
days_left = [
ceil((100 - progress) / speed)
for progress, speed in zip(progresses, speeds)
]
result = []
# 남은 일수로 반복
while days_left:
# 첫 번째 기능의 남은 일수를 기준으로 묶음 시작
current_day = days_left.pop(0)
count = 1
# 현재 기준보다 일찍 끝나는 기능들을 함께 묶음
while days_left and days_left[0] <= current_day:
days_left.pop(0)
count += 1
result.append(count)
return result