[Algo-Challenge]

SELOG·2024년 2월 6일
0

ALGO-CHALLENGE

목록 보기
6/17

[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
}
profile
금융 IT 전문가가 될거야

0개의 댓글