안녕하세요
프로그래머스 특정 기간 동안 대여 가능한 자동차들의 대여비용 구하기 풀이입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/157339
-- 코드를 입력하세요
-- 1. 자동차종류가 세단 또는 SUV -> o
-- 2. 2022.11.01 ~ 2022.11.30 대여가능
-- 대여가능하다는 말은 대여날짜에 포함이 안되어있다는 말이다.
-- 2.1. 30일간 대여금액이 50만원=> , < 200만원
-- 3. 정렬 : 금액 기준으로 내림차순 DECS, 자동차종류 오름차순 ASC, 자동차ID DESC
SELECT A.CAR_ID, A.CAR_TYPE
, (((100 - C.DISCOUNT_RATE)/100)*A.DAILY_FEE)*30 AS FEE
FROM CAR_RENTAL_COMPANY_CAR A
, CAR_RENTAL_COMPANY_DISCOUNT_PLAN C
WHERE A.CAR_TYPE IN ('SUV','세단')
--AND A.CAR_ID = B.CAR_ID
AND A.CAR_TYPE = C.CAR_TYPE
AND A.CAR_ID NOT IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
--AND TO_DATE('2022-11','YYYY-MM') BETWEEN START_DATE AND END_DATE
WHERE TO_CHAR(START_DATE,'YYYY-MM-DD') <'2022-12-01' -- 범위 체크하는 법 몰랐음
AND TO_CHAR(END_DATE,'YYYY-MM-DD') > '2022-10-31' -- 범위 체크하는 법 올랐음
)
AND (((100 - C.DISCOUNT_RATE)/100)*A.DAILY_FEE)*30 BETWEEN 500000 AND 1999999 -- BETWEEN 사용법 제대로 체크 못함
-- AND (((1 - C.DISCOUNT_RATE)/100)*A.DAILY_FEE)*30 <=2000000
AND C.DURATION_TYPE = '30일 이상' ---문제요건을 이거 빼먹음
ORDER BY FEE DESC, A.CAR_TYPE ASC, A.CAR_ID DESC
문제에서 헷갈렸던 게 딱 1가지가 있는데요.
바로 11월(22.11.01~22.11.30)에 대여했던 차량은 제외하는 것입니다.
그러면 범위를 체크를 해야 하는데...
크게 2가지 방법이 있더라고요.
1. AND TO_DATE('2022-11', 'YYYY-MM') BETWEEN START_DATE AND END_DATE
--> 22년 11월 1일이 START_DATE와 END_DATE의 포함이 되어있는지
2. WHERE TO_CHAR(START_DATE, 'YYYY-MM-DD') <'2022-12-01'
AND TO_CHAR(END_DATE, 'YYYY-MM-DD') > '2022-10-31'
- BETWEEN보다 가독성은 떨어집니다.
- 생각이 약간 필요합니다.
예를 들어 START_DATE가 22.10.31이고 END_DATE가 22.11.02이면 당연히 11월 안에 포함됩니다.
위의 식으로 다시 풀어보면
2022-10-31(START_DATE) < 2022-12-01 이면서
2022-11-02(END_DATE) > 2022-10-31
당연히 2022-11-01부터 2022-11-30 사이에 존재하므로 조회가 됩니다.
어쨌든 2번의 글이 이해가 조금 안 되었는데 이번기회에 이해가 되어서 좋았습니다.
범위체크는 하는 1번 2번 모두 알아두시면 좋습니다.
감사합니다.
'JAVA > 알고리즘' 카테고리의 다른 글
[ SQL Level4 ] 프로그래머스 - 보호소에서 중성화한 동물 (0) | 2024.01.20 |
---|---|
[ SQL ] 프로그래머스 - 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.01.20 |
[ 완전탐색 연습문제 ] 프로그래머스 소수찾기 - 자바 Java (0) | 2023.03.06 |
[ 해시 Level3 ] 프로그래머스 베스트앨범 - 자바 JAVA (2) | 2021.07.19 |
[ 해시 Level2 ] 프로그래머스 위장 - 자바 JAVA (0) | 2021.07.18 |
댓글