KATA#48

codataffee·2024년 5월 30일
0

CODEKATA

목록 보기
48/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Second Highest Salary

✔️ 제출 쿼리

✔️ 쿼리 분석

WITH ranking AS (
    SELECT salary,
           DENSE_RANK() OVER (ORDER BY salary DESC) rankings
    FROM Employee
)

SELECT 
    CASE 
        WHEN (SELECT COUNT(DISTINCT salary) FROM Employee) < 2 THEN NULL
        ELSE (SELECT salary FROM ranking WHERE rankings = 2 LIMIT 1)
    END SecondHighestSalary;


- PYTHON


✔️ 문제 #1:

✔️ 제출 코드

✔️ 코드 분석

def solution(today, terms, privacies):
    # 날짜를 일수로 변환하는 함수 (모든 달을 28일로 가정)
    def date_to_days(date):
        year, month, day = map(int, date.split('.'))
        return year * 12 * 28 + month * 28 + day
    # 오늘 날짜를 일수로 변환
    today_days = date_to_days(today)
    # 약관 딕셔너리 생성
    terms_dict = {term.split()[0]: int(term.split()[1]) * 28 for term in terms}
    # 결과를 저장할 리스트 생성
    result = []

    for i, privacy in enumerate(privacies):
        privacy_date, privacy_term = privacy.split()
        # 수집 날짜를 일수로 변환 (함수 사용)
        privacy_days = date_to_days(privacy_date)
        # 유효기간을 더한 만료 날짜 계산
        expiry_days = privacy_days + terms_dict[privacy_term]
        # 만료일이 오늘 이전인지 확인
        if expiry_days <= today_days:
            result.append(i + 1)

    return result


✔️ CHECK POINT

  • 코드카타 권태기가 온 듯..
    문제를 보자마자 어떻게 풀어야할 지 감이 잡히고,
    바로 쿼리나 코드를 쓰던 때가 언제였는지 가물가물..ㅋㅋ
    멘탈 관리하자!

  • SQL

    • 윈도우 함수를 사용해야 할 것 같은 쿼리를 보면 이제 좀 반갑다.
      (나 이거 할 줄 알아!)
    • 테스트 케이스 중 중복되는 salary 값이 있길래,
      순위의 중복을 허용하는 DENSE_RANK() 를 사용하고 LIMIT로 하나만 출력했는데,
      생각해보니 ROW_NUM() 사용하고 그냥 2번 뽑아냈으면 됐던 것 같다.
  • PYTHON

    • 진짜 역대급으로 어떻게 풀어야할 지 막막했던 문제..
      파이썬으로 날짜를 다루는 게 생각보다 쉽지 않았다.
    • 예전에 정리했던 map 함수로 date 값을 split한 값을
      year, month, day 변수로 받아 일수로 변환하는 과정에 대해 다시 한 번 확인!

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

0개의 댓글

관련 채용 정보