KATA#65

codataffee·2024년 6월 17일
0

CODEKATA

목록 보기
65/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


✔️ 문제 #1: Revising Aggregations - Averages

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT AVG(POPULATION)
FROM CITY
GROUP BY DISTRICT
HAVING DISTRICT = 'California'


- PYTHON


✔️ 문제 #1: 프로세스

✔️ 제출 코드

✔️ 코드 분석

# 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


✔️ CHECK POINT

  • PYTHON
    • DEQUE
      Python의 collections 모듈에서 제공하는 deque는 큐와 스택을 구현할 때 유용함.
      리스트와 달리 양쪽 끝에서의 삽입과 삭제가 O(1) 시간 복잡도를 가지며,
      중간에서의 삽입과 삭제는 지원하지 않는다.
    • 주요 특징
      • 양쪽 끝에서의 빠른 연산 :
        deque 는 양쪽 끝에서 요소를 빠르게 추가하거나 제거할 수 있다.
      • 효율적인 삽입과 삭제 :
        양쪽 끝에서 O(1) 시간 복잡도로 삽입과 삭제가 가능하여,
        큐와 덱(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

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보