본문 바로가기
Problem Solving/Baekjoon

[백준] 1535 안녕 - Dynamic Programming / Java

by graycode 2023. 1. 18.

 문제 링크

 

1535번: 안녕

첫째 줄에 사람의 수 N(≤ 20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        StringTokenizer tmp;

        int n = Integer.parseInt(br.readLine());

        int[][] arr = new int[n][2];
        int[] dp = new int[100];

        st = new StringTokenizer(br.readLine());
        tmp = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(tmp.nextToken());
            for (int j = 99; j >= arr[i][0]; j--)
                dp[j] = Math.max(dp[j - arr[i][0]] + arr[i][1], dp[j]);
        }

        bw.write(String.valueOf(dp[99]));
        bw.flush();
    }

}

댓글