1 λΆ„ μ†Œμš”

πŸ“ [SW_1952] 수영μž₯

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class SWEA_SW_1952 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();
    static StringTokenizer st;
    static int[] price;
    static int[] month;
    static int min;
    public static void main(String[] args) throws IOException {
        int tc = Integer.parseInt(br.readLine());
        for(int t=1;t<=tc;t++){
            sb.append("#").append(t).append(" ");
            price = new int[4];
            month = new int[12];

            // 가격 μž…λ ₯
            st = new StringTokenizer(br.readLine()," ");
            for(int i=0; i<4; i++){
                price[i] = Integer.parseInt(st.nextToken());
            }

            // 수영μž₯ 이용 κ³„νš
            st = new StringTokenizer(br.readLine()," ");
            for(int i=0; i<12; i++){
                month[i] = Integer.parseInt(st.nextToken());
            }

            min = price[3];
            dfs(0,0);
            sb.append(min).append("\n");
        }
        System.out.println(sb);
    }
    static void dfs(int cnt, int sum){
        if(cnt>=12){
            min = Math.min(min,sum);
            return;
        }

        // μ΄μš©κ³„νšμ΄ μ—†λ‹€λ©΄
        if(month[cnt] == 0){
            dfs(cnt+1, sum);
        }
        else {
            // 일
            dfs(cnt + 1, sum + (month[cnt] * price[0]));
            // 1κ°œμ›”
            dfs(cnt + 1, sum + price[1]);
            // 3κ°œμ›”
            dfs(cnt + 3, sum + price[2]);
        }
    }
}

πŸ€” λ‚˜μ˜ 생각

μŠ€ν„°λ””μ—μ„œ ν’€μ—ˆλŠ”λ° μ²˜μŒμ— λ„ˆλ¬΄ λ³΅μž‘ν•˜κ²Œ μƒκ°ν–ˆλ‹€..
μ΅œλŒ€ν•œ ν•˜λ£¨ 가격과 ν•œλ‹¬ 가격을 λΉ„κ΅ν•΄μ„œ μΌμˆ˜λ”°λΌ 처리λ₯Ό ν•΄μ£ΌλŠ”..
κ΅¬μƒν•˜λ©΄μ„œλ„ λ„ˆλ¬΄ 경우의 μˆ˜κ°€ λ§Žμ•„μ„œ μ’€ μ€„μ—¬μ„œ ν•΄λ΄€μ§€λ§Œ κ²°κ³ΌλŠ” μ‹€νŒ¨μ˜€λ‹€.. λ‚˜μ€‘μ—λŠ” 3λ‹¬μ˜ 가격이 1λ‹¬μ˜ 가격보닀 더 적은 경우만 λΉΌκ³  ( TC 2번 ) λ‹€ λ§žμΆ°μ„œ 아쉽닀고 μƒκ°ν–ˆλŠ”λ° μŠ€ν„°λ””μ›μ˜ 풀이λ₯Ό λ³΄λ‹ˆ ν—ˆνƒˆν–ˆλ‹€..γ…‹γ…‹γ…‹
dfsλ₯Ό μ΄μš©ν•΄ μ™„νƒμœΌλ‘œ ν‘ΈλŠ” κ²ƒμ΄μ˜€λ‹€.. μ΄λ ‡κ²Œ κ°„λ‹¨ν•œ 것을 생각해내지 λͺ»ν•˜λ‹€λ‹ˆ.. 아직 dfs와 μΉœν•˜μ§€ μ•Šλ‹€λŠ” 것을 증λͺ…ν•œλ‹€..γ…‹γ…‹
κ°„λ‹¨ν•˜λ‹€ 1μ›”λΆ€ν„° 12μ›”κΉŒμ§€ 수영μž₯κ°€λŠ” 일수λ₯Ό λ°›κ³  이제 μ²˜μŒλΆ€ν„° μ‹œμž‘ν•΄μ„œ 12월이 λ„˜μ–΄κ°€λ©΄ 계산을 ν•΄μ£ΌλŠ” 것이닀. 그것을 일 λ‹¨μœ„ μ›” λ‹¨μœ„ 3κ°œμ›” λ‹¨μœ„λ‘œ κ³„μ‚°ν•˜κ³  , 기본값은 1λ…„ κ°€κ²©μœΌλ‘œ ν•΄μ„œ 비ꡐλ₯Ό ν•΄μ£Όλ©΄ λœλ‹€.
μž¬κ·€μ  μ„±μ§ˆμ„ 잘 μ΄μš©ν•΄μ„œ ν’€μ΄ν•œ λ¬Έμ œμ΄λ‹€. λ‹€μŒμ— 이런 μ‹μ˜ λ¬Έμ œκ°€ λ‚˜μ˜€λ©΄ dfs둜 μž˜μƒκ°ν•΄λ΄μ•Όκ² λ”° !!