티스토리 뷰

알고리즘/백준

백준 16938 (캠프 준비) java

김다미김태리신시아 2023. 1. 2. 00:18

https://www.acmicpc.net/problem/16938

 

16938번: 캠프 준비

난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다.

www.acmicpc.net

import java.io.*;
import java.util.*;

public class Main {
    static int n,l,r,x = 0;
    static int result = 0;
    static int[] board = new int[16];
    static boolean[] visit = new boolean[16];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st =new StringTokenizer(br.readLine()," ");
        n= Integer.parseInt(st.nextToken());
        l = Integer.parseInt(st.nextToken());
        r =Integer.parseInt(st.nextToken());
        x =Integer.parseInt(st.nextToken());

        st =new StringTokenizer(br.readLine()," ");
        for(int i=1;i<=n;i++)
        {
            board[i] = Integer.parseInt(st.nextToken());
        }
        travel(1,0,0,0,0);
        System.out.println(result);
        br.close();
    }

    static void travel(int k,int num, int sum,int max,int min)
    {
        if(k>n)
        {
            if(num>=2&&sum>=l&&sum<=r&&(max-min)>=x&&max!=0&&min!=0)
            {
                result++;
            }
            return;
        }

        int s2 = sum + board[k];
        int max2 = big(board[k], max);
        int min2 = small(board[k], min);
        travel(k + 1, num + 1, s2, max2, min2);
        travel(k+1,num,sum,max,min);

    }

    static int big(int a,int b)
    {
        if(a>b)
            return a;
        else
            return b;
    }
    static int small(int a,int b)
    {
        if(b==0)
            return a;
        if(a<b)
            return a;
        else
            return b;
    }
}

해당 문제의 값을 추가한 경우와 추가하지 않을 경우로 나눠서 생각하면 쉽게 해결할 수 있는 문제이다.

'알고리즘 > 백준' 카테고리의 다른 글

백준 18430 (무기 공학) - java  (1) 2023.01.03
백준 19942 (다이어트) - java  (1) 2023.01.02
백준 3980 (선발 명단) java  (0) 2023.01.01
백준 2580 (스도쿠) java  (0) 2023.01.01
백준 1987 (알파벳) java  (0) 2022.12.30