KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
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;
✔️ 제출 코드
✔️ 코드 분석
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
코드카타 권태기가 온 듯..
문제를 보자마자 어떻게 풀어야할 지 감이 잡히고,
바로 쿼리나 코드를 쓰던 때가 언제였는지 가물가물..ㅋㅋ
멘탈 관리하자!
SQL
DENSE_RANK()
를 사용하고 LIMIT로 하나만 출력했는데,ROW_NUM()
사용하고 그냥 2번 뽑아냈으면 됐던 것 같다.PYTHON
map
함수로 date 값을 split한 값을year
, month
, day
변수로 받아 일수로 변환하는 과정에 대해 다시 한 번 확인!