KATA#64

codataffee·2024년 6월 16일
0

CODEKATA

목록 보기
64/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Revising Aggregations - The Sum Function

✔️ 제출 쿼리

✔️ 쿼리 분석

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


- PYTHON


✔️ 문제 #1: 기능개발

✔️ 제출 코드

✔️ 코드 분석

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

✔️ CHECK POINT

  • SQL

    • GROUP BYHAVING 으로 원하는 조건 후 집계 (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

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

0개의 댓글

관련 채용 정보