KATA#33

codataffee·2024년 5월 14일
0

CODEKATA

목록 보기
33/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: User Activity for the Past 30 Days I

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT activity_date `day`,
       COUNT(DISTINCT user_id) active_users
FROM Activity
WHERE DATEDIFF('2019-07-27', activity_date) BETWEEN 0 AND 29
GROUP BY activity_date


✔️ 문제 #2: Product Sales Analysis III

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT product_id, 
       `year` first_year, 
       quantity,
       price
FROM Sales
WHERE (product_id, `year`) 
	  IN (
         SELECT product_id,
                MIN(`year`)
         FROM Sales
         GROUP BY product_id
         )


- PYTHON


✔️ 문제 #1: 명예의 전당(1)

✔️ 제출 코드

✔️ 코드 분석

def solution(k, score):
    answer = [] # 매일 발표된 명예의 전당의 최하위 점수를 저장할 리스트
    kscore = [] # 현재 날짜까지의 k개의 점수 리스트
    for i in score:
        kscore.append(i) # 현재 날짜의 점수를 kscore 에 추가
        kscore.sort(reverse = True) # 내림차순으로 정렬
        # kscore 리스트의 길이가 k보다 크면 마지막 점수(가장 낮은 점수) 제거
        if len(kscore) > k:
            kscore.pop()
        # 매일 명예의 전당에 추가되는 최하위 점수를 answer에 추가
        answer.append(kscore[-1])
    return answer

from heapq import *
def solution(k, score):
    answer = []
    q = []
    for s in score:
        heappush(q, s) # 점수를 힙에 추가
        if len(q) > k:
            p = heappop(q) # 힙에서 가장 작은 요소를 제거
            answer.append(min(q)) # 현재 힙의 가장 작은 요소를 answer에 추가
        else:
            answer.append(min(q)) # k개 미만일 때도 현재 힙의 가장 작은 요소를 answer에 추가
    return answer
k = 5
score = [0, 300, 40, 300, 20, 70, 150, 50, 500, 1000]
solution(k, score)

✔️ 문제 #2: 2016년

✔️ 제출 코드

✔️ 코드 분석

def solution(a, b):
    d = [31,29,31,30,31,30,31,31,30,31,30,31] # 월별 일수 저장 리스트
    w = ['FRI',"SAT",'SUN','MON',"TUE",'WED','THU'] # 주별 요일 저장 리스트
    t = 0 # 1월 1일부터 a월 b일 까지의 일수 차이 
    answer = ''
    if a == 1: # a가 1월일 때
        t = b % 7 # b일을 7로 나눈 나머지를 t로 저장
        answer = w[t - 1] # 1월 1일 금요일로부터 시작해서 t 번째 요일 출력
    else :
        for i in range(a - 1) : # a월 직전까지 반복
            t += d[i] # a월 직전 달까지의 일수 더하기
        t += b # b일 더하기
        t %= 7 # 전체 일수를 7로 나눈 나머지
        answer = w[t - 1]
    return answer

import datetime
def solution(a, b):
# datetime 객체를 생성하여 주어진 월, 일에 해당하는 날짜 입력
    d = datetime.datetime(2016, a, b).strftime("%A")
    # strftime 메서드를 사용하여 해당 날짜의 요일을 문자열로 반환
    # "%A"는 전체 요일 이름을 나타내는 포맷 코드
    d = d.upper()
    # 문자열을 대문자로 변환
    return d[0:3]
    # 요일의 첫 세 글자를 반환
a = 5
b = 22
solution(a,b)

✔️ CHECK POINT

  • PYTHON
    • heapq 모듈
      .
    • .pop() : 맨 마지막 원소를 리턴하고 해당 값은 삭제하는 메서드
    • 리스트 안에 k개의 값을 높은 값들로만 채워 유지하려고 할 때,
      리스트를 내림차순 정렬하고 if len(kscore) > k: kscore.pop()을 하면,
      k개로 갯수를 유지하면서 높은 값들로만 유지할 수 있다.
      .
    • datetime 모듈

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

0개의 댓글

관련 채용 정보