KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT AVG(POPULATION)
FROM CITY
GROUP BY DISTRICT
HAVING DISTRICT = 'California'
✔️ 제출 코드
✔️ 코드 분석
# collections 모듈에서 deque 임포트
from collections import deque
def solution(priorities, location):
# 우선순위를 인덱스와 값으로 받는 deque 생성
queue = deque([(i, p) for i, p in enumerate(priorities)])
# 프로세스의 실행 순서를 세기 위한 변수 생성
execution_order = 0
# 큐가 빈 배열이 될 때까지 반복
while queue:
# 큐의 첫 번째 요소를 current에 저장,
# popleft() 로 큐의 왼쪽 끝 요소를 제거하고 반환
current = queue.popleft()
# 큐에 남아있는 프로세스 중
# current 프로세스보다 높은 우선순위를 가진 프로세스가 있는지 확인
# any() 함수는 조건을 만족하는 요소가 하나라도 있으면 True 반환
if any(current[1] < item[1] for item in queue):
# current 프로세스보다 높은 우선순위를 가진 프로세스가 있다면,
# current 프로세스를 큐의 오른쪽 끝에 다시 저장
queue.append(current)
else:
# 없다면, 실행 순서 1 증가
execution_order += 1
# current 프로세스의 인덱스와 location이 동일한지 확인
if current[0] == location:
# 맞다면, 실행 순서를 반환하고 함수 종료
return execution_order
DEQUE
collections
모듈에서 제공하는 deque
는 큐와 스택을 구현할 때 유용함.# collections 모듈에서 deque 임포트
from collections import deque
def solution(priorities, location):
# 우선순위를 인덱스와 값으로 받는 deque 생성
queue = deque([(i, p) for i, p in enumerate(priorities)])
# 프로세스의 실행 순서를 세기 위한 변수 생성
execution_order = 0
# 큐가 빈 배열이 될 때까지 반복
while queue:
# 큐의 첫 번째 요소를 current에 저장,
# popleft() 로 큐의 왼쪽 끝 요소를 제거하고 반환
current = queue.popleft()
# 큐에 남아있는 프로세스 중
# current 프로세스보다 높은 우선순위를 가진 프로세스가 있는지 확인
# any() 함수는 조건을 만족하는 요소가 하나라도 있으면 True 반환
if any(current[1] < item[1] for item in queue):
# current 프로세스보다 높은 우선순위를 가진 프로세스가 있다면,
# current 프로세스를 큐의 오른쪽 끝에 다시 저장
queue.append(current)
else:
# 없다면, 실행 순서 1 증가
execution_order += 1
# current 프로세스의 인덱스와 location이 동일한지 확인
if current[0] == location:
# 맞다면, 실행 순서를 반환하고 함수 종료
return execution_order