코딩테스트

[26.01.16 코테(Python/MySQL)]-같은 숫자는 싫어&대여 기록이 존재하는 자동차 리스트 구하기

지니248 2026. 1. 16. 13:56

Lv1. 같은 숫자는 싫어 (Python)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

내가 작성한 코드

def solution(arr):
    answer = []
    
    for i in arr: 
        if len(answer) == 0: # answer가 비어있는 경우
            answer.append(i) # answer에 i를 추가
        else: # answer에 이미 값이 하나 이상 있는 경우
            if answer[-1] != i: # answer의 마지막 값과 i값이 다르다면
                answer.append(i) # 다를 때만 answer에 i를 추가
    return answer

 

새로 배운 코드

def solution(arr):
    answer = []
    
    for i in arr: 
        if answer[-1:] == [i]: # answer의 마지막 값이 i와 같으면
            continue # 연속 중복이므로 즉시 반복 종료
        answer.append(i) # 중복이 아니면 answer에 추가
        
    return answer

Lv3. 대여 기록이 존재하는 자동차 리스트 구하기 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/157341

 

내가 작성한 코드

-- 풀이1 (JOIN + MONTH)
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
  ON C.CAR_ID = H.CAR_ID
WHERE C.CAR_TYPE = '세단' AND MONTH(H.START_DATE) = 10
ORDER BY C.CAR_ID DESC;

-- 풀이2 (JOIN + DATE_FORMAT)
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
  ON C.CAR_ID = H.CAR_ID
WHERE C.CAR_TYPE = '세단' AND DATE_FORMAT(H.START_DATE, '%m') = '10'
ORDER BY C.CAR_ID DESC;

-- 풀이3 (CTE + IN)
-- WITH 부분: 10월에 대여를 시작한 자동차들의 CAR_ID 목록
WITH OCT_CAR_IDS AS(SELECT DISTINCT CAR_ID
                    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                    WHERE MONTH(START_DATE) = 10)
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = '세단' AND CAR_ID IN(SELECT CAR_ID FROM OCT_CAR_IDS)
ORDER BY CAR_ID DESC;

-- 풀이4 (EXISTS)
-- EXISTS: 조건을 만족하는 행이 1개라도 있으면 TRUE
SELECT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
WHERE C.CAR_TYPE = '세단'
  AND EXISTS(SELECT 1
             FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H
             WHERE H.CAR_ID = C.CAR_ID
               AND MONTH(H.START_DATE) = 10)
ORDER BY C.CAR_ID DESC;