[SQL : level 4] 자동차 대여 기록 별 대여 금액 구하기 - 151141
문제 링크
My Code
-- 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해
-- 기록 별로 대여 금액(컬럼명: FEE)을 구하여
-- 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문
-- 대여 금액 DESC -> 대여 기록 ID DESC
# COALESCE(P.DISCOUNT_RATE, 0)은 P.DISCOUNT_RATE가 NULL이 아니면 P.DISCOUNT_RATE를, NULL이면 0을 반환
SELECT H.HISTORY_ID,
ROUND((DATEDIFF(H.END_DATE, H.START_DATE) + 1) * C.DAILY_FEE * (1 - COALESCE(P.DISCOUNT_RATE, 0) * 0.01)) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON C.CAR_ID = H.CAR_ID
# 할인이 없는 NULL인 경우때문에 LEFT JOIN
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P ON C.CAR_TYPE = P.CAR_TYPE
AND (
CASE
WHEN DATEDIFF(H.END_DATE,H.START_DATE)+1 >= 90 THEN '90일 이상'
WHEN DATEDIFF(H.END_DATE,H.START_DATE)+1 >= 30 THEN '30일 이상'
WHEN DATEDIFF(H.END_DATE,H.START_DATE)+1 >= 7 THEN '7일 이상'
ELSE NULL
END
) = P.DURATION_TYPE
WHERE C.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC
;
[JAVA : level 3] 단어 변환 - 43163
문제 링크
My Code
class Solution {
public static int ans, count;
public static boolean[] visited;
public int solution(String begin, String target, String[] words) {
ans = Integer.MAX_VALUE;
for(int i = 0 ; i < words.length ; i++){
String temp = words[i];
visited = new boolean[words.length];
if(compare(begin, temp)){
count++;
visited[i] = true;
dfs(1, temp, target, words);
}
}
return ans == Integer.MAX_VALUE ? 0 : ans;
} // solution
public static void dfs(int count, String begin, String target, String[] words){
if(begin.equals(target)){
ans = Math.min(ans, count);
return;
}
for(int i = 0 ; i < words.length ; i++){
if(!visited[i] && compare(begin, words[i])){
visited[i] = true;
dfs(count+1, words[i], target, words);
visited[i] = false;
}
}
} // dfs
// 한 개만 다르면 true
public static boolean compare(String first, String second){
int k = 0;
for(int i = 0 ; i < first.length() ; i++){
if(first.charAt(i) == second.charAt(i)) k++;
}
if( k == first.length() -1) return true;
else return false;
} // compare
}