[내일배움캠프] SQL/Python 코드카타

sleekstar·2025년 6월 9일

SQL 코드카타

문제 1.

대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

IDEA

CAR_ID가 테이블에서 중복으로 나타남. 총 횟수가 5회 이상인 것만 고르는 것이 문제의 요구 조건 => 서브쿼리가 필요

✅WHERE절에 분석 대상 기간 지정 및 서브쿼리로 ‘대여 5회 이상 자동차’ 선정

WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
AND CAR_ID IN (
  SELECT CAR_ID
  FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
  WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
  GROUP BY CAR_ID
  HAVING COUNT(*) >= 5
)

해당 조건에 대한 서브쿼리를 작성하는 게 포인트였던 것 같다.

PROCESS

단계설명
18~10월로 범위 필터링
25회 이상 대여된 자동차 ID만 추림 (서브쿼리)
3월별로 그룹화 + 대여 횟수 세기
40건 월 제거
5월 오름차순, CAR_ID 내림차순 정렬

정답 쿼리

SELECT
  MONTH(START_DATE) AS MONTH,
  CAR_ID,
  COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
  AND CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY CAR_ID
    HAVING COUNT(*) >= 5
  )
GROUP BY MONTH, CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH ASC, CAR_ID DESC;

쿼리가 길고 어려워지고 있다. 단계별로 어떤 작업을 수행해야 하는지 먼저 정리하는 것이 중요하다는 것을 다시금 깨닫는다.

Python 코드카타

문제 1.

부족한 금액 계산하기

IDEA

요금이 탈 때마다 100원씩 인상된다.
공차가 100인 등차수열이라고 생각할 수 있음
그렇다면 총 요금은 등차수열의 합 공식을 이용해서 구할 수 있다.
n * (a+l) / 2 (n은 항의 갯수, a는 첫째 항, l은 끝 항)

여기에 price 를 곱하면 총합이다.

즉, total_cost = price count (count + 1) // 2

정답 코드

def solution(price, money, count):
    total_cost = price * count * (count + 1) // 2  # 총 이용 요금
    shortage = total_cost - money                  # 부족한 금액
    return shortage if shortage > 0 else 0         # 부족하면 차액, 아니면 0

문제 2.

문자열 다루기 기본

문법 정리

  1. s.isdigit() 문자열 s숫자로만 구성되어 있는지를 확인한다.
    isdigit()는 공백, 기호, 문자 등 모두 False를 반환함.

  2. len(s) in [4, 6] 문자열의 길이가 4 또는 6인지 확인
    in 연산자는 리스트 안에 있는지를 확인해 주는 기능을 가짐.

정답 코드

def solution(s):
    return s.isdigit() and len(s) in [4, 6]
profile
기록용

0개의 댓글