Notice
Recent Posts
Recent Comments
Today
Total
05-21 22:06
Link
관리 메뉴

Partially Committed

[λ°±μ€€ 19622] νšŒμ˜μ‹€ λ°°μ •3 (JAVA) λ³Έλ¬Έ

πŸ”₯ Algorithm || λ¬Έμ œν’€μ΄/PS

[λ°±μ€€ 19622] νšŒμ˜μ‹€ λ°°μ •3 (JAVA)

WonderJay 2023. 8. 18. 15:37
728x90
λ°˜μ‘ν˜•
SMALL

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

 

19622번: νšŒμ˜μ‹€ λ°°μ • 3

μ„œμ€€μ΄λŠ” μ•„λΉ λ‘œλΆ€ν„° N개의 νšŒμ˜μ™€ ν•˜λ‚˜μ˜ νšŒμ˜μ‹€μ„ μ„ λ¬Όλ‘œ λ°›μ•˜λ‹€. 각 νšŒμ˜λŠ” μ‹œμž‘ μ‹œκ°„, λλ‚˜λŠ” μ‹œκ°„, 회의 인원이 주어지고 ν•œ νšŒμ˜μ‹€μ—μ„œ λ™μ‹œμ— 두 개 μ΄μƒμ˜ νšŒμ˜κ°€ 진행될 수 μ—†λ‹€. λ‹¨,

www.acmicpc.net


EASY~

 

λ¬Έμ œλŠ” λ‹¨μˆœν•˜λ‹€

 

νšŒμ˜μ‹€μ΄ 1 개 있고,

 

n 개의 회의 정보가 주어진닀.

 

회의 μ •λ³΄λŠ” μ‹œμž‘μ‹œκ°„, μ’…λ£Œμ‹œκ°„, 참석 μΈμ›μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

 

주어진 μƒν™©μ—μ„œ κ°€μž₯ λ§Žμ€ 인원이 회의λ₯Ό 참석할 수 μžˆμ„ λ•Œ,

 

κ·Έ μΈμ›μ˜ 수λ₯Ό κ³„μ‚°ν•˜λ©΄ λœλ‹€.

 

회의 μ •λ³΄λŠ” 항상 μ‹œμž‘ μ‹œκ°„ < μ’…λ£Œ μ‹œκ°„μ„ λ§Œμ‘±ν•œ μƒνƒœλ‘œ 주어진닀.

 

그리고 μ€‘μš”ν•œ 쑰건이 ν•˜λ‚˜ μžˆλŠ”λ°...

 

K 번째 νšŒμ˜λŠ” K-1, K+1 번째 νšŒμ˜λž‘λ§Œ μ‹œκ°„μ΄ κ²ΉμΉœλ‹€λŠ” μ œμ•½μ΄λ‹€.

 

이 쑰건 덕뢄에 문제의 λ‚œμ΄λ„κ°€ ν™• 떨어진닀.

 

K 번째 회의λ₯Ό νƒν•˜λ©΄ K - 1 번째 νšŒμ˜λŠ” 택할 수 μ—†λ‹€.

 

즉,

 

K-2 번째 회의λ₯Ό νƒν•˜κ³ , K 번째 회의λ₯Ό νƒν•˜λŠ” κ²½μš°μ™€

 

K-1 번째 회의λ₯Ό νƒν•˜κ³ , K 번째 회의λ₯Ό νƒν•˜μ§€ μ•ŠλŠ” 경우 쀑

 

더 쒋은 경우(인원 μˆ˜κ°€ 더 λ§Žμ€ 경우 ~> 이 κ²½μš°μ—λŠ” max μ—°μ‚°)λ₯Ό κ°±μ‹ ν•΄λ‚˜κ°€λ©΄ λœλ‹€.

 

즉,

 

f(x) λ₯Ό x 번째 νšŒμ˜κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œ, 참석가λŠ₯ν•œ μΈμ›μ˜ μ΅œλŒ€κ°’μ΄λΌκ³  μ •μ˜ν•˜λ©΄

 

f(x) = Max (f(x-2) + people(x),  f(x-1)) μ΄λΌλŠ” 점화식을 μ™„μ„±ν•  수 μžˆλ‹€.

 

( μ—¬κΈ°μ„œ people(x) λŠ” x 번째 νšŒμ˜μ— μ°Έμ—¬ν•˜κΈ°λ‘œ μ˜ˆμ •λœ 인원 수λ₯Ό μ˜λ―Έν•œλ‹€. )

 

점화식을 μ‰½κ²Œ λ„μΆœν•  수 μžˆμœΌλ―€λ‘œ

 

bottom - up λ°©μ‹μœΌλ‘œ dp table 을 μ±„μ›Œλ‚˜κ°ˆ 수 μžˆλ‹€.

 

dp[0] 은 0 번째 회의의 참석 인원을 λ„£μ–΄μ£Όλ©΄ 될 것이고,

 

dp[1] 은 dp[0] κ³Ό people[1] 쀑 더 큰 κ°’μœΌλ‘œ μ΄ˆκΈ°ν™” ν•˜λ©΄ λœλ‹€.

 

dp[2] λΆ€ν„° n-1 κΉŒμ§€λŠ” μœ„μ—μ„œ λ„μΆœν•œ μ ν™”μ‹μœΌλ‘œ μ±„μ›Œλ‚˜κ°€λ©΄

 

μ΅œμ’… λ‹΅μ•ˆμ€ dp[n-1] 이 λœλ‹€.

 

 


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

public class Main {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer stk;

        int n = Integer.parseInt(br.readLine()); // 회의 수
        int[][] table = new int[n + 1][3];
        for (int i = 0; i < n; i++) {
            stk = new StringTokenizer(br.readLine());
            table[i][0] = Integer.parseInt(stk.nextToken());
            table[i][1] = Integer.parseInt(stk.nextToken());
            table[i][2] = Integer.parseInt(stk.nextToken());
        }

        long[] dp = new long[n + 1];

        dp[0] = table[0][2];
        dp[1] = Math.max(dp[0], table[1][2]);

        for (int i = 2; i < n; i++) {
            dp[i] = Math.max(dp[i - 2] + table[i][2], dp[i - 1]);
        }
        bw.write(dp[n - 1] + "\n");

        bw.flush();
        bw.close();
    }
}

 

μœ„ λ¬Έμ œλŠ” 

 

" K 번째 νšŒμ˜λŠ” K-1, K+1 번째 νšŒμ˜λž‘λ§Œ μ‹œκ°„μ΄ κ²ΉμΉœλ‹€λŠ” μ œμ•½ " 덕뢄에 μ‰½κ²Œ ν’€ 수 μžˆμ—ˆλ‹€.

 

이 쑰건이 없어진닀면..??

 

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

 

19623번: νšŒμ˜μ‹€ λ°°μ • 4

μ„œμ€€μ΄λŠ” μ•„λΉ λ‘œλΆ€ν„° N개의 νšŒμ˜μ™€ ν•˜λ‚˜μ˜ νšŒμ˜μ‹€μ„ μ„ λ¬Όλ‘œ λ°›μ•˜λ‹€. 각 νšŒμ˜λŠ” μ‹œμž‘ μ‹œκ°„, λλ‚˜λŠ” μ‹œκ°„, 회의 인원이 주어지고 ν•œ νšŒμ˜μ‹€μ—μ„œ λ™μ‹œμ— 두 개 μ΄μƒμ˜ νšŒμ˜κ°€ 진행될 수 μ—†λ‹€. λ‹¨,

www.acmicpc.net

그러면 μœ„ 문제 상황이 λ˜λŠ”λ°,

 

이건 내일 ν’€μ–΄μ•Όκ² λ‹€ ^_^

728x90
λ°˜μ‘ν˜•
LIST
Comments