๊ธฐ๋ก๋ฐฉ

BOJ_1149 : RGB๊ฑฐ๋ฆฌ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1149 : RGB๊ฑฐ๋ฆฌ

Soom_1n 2023. 6. 8. 12:36

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ์ง‘์— R,G,B 3๊ฐ€์ง€ ์ƒ‰์ด ์—ฐ์†ํ•˜์ง€ ์•Š๋„๋ก ์น ํ•œ๋‹ค.
    • ๊ฐ ์ง‘์˜ ์„ธ ๊ฐ€์ง€ ์ƒ‰์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ฃผ์–ด์ง„๋‹ค.
    • ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ์ตœ์†Œ๋น„์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์น ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด 3x2x2x...x2 = 3x2x(n-1) = 6(n-1)
    • n์€ ์ตœ๋Œ€ 1,000์ด๋ฏ€๋กœ, ์น ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ 5994๊ฐ€์ง€
    • ๊ฐ€์ง€์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š์•„ ์žฌ๊ท€, ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•œ ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋„ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‹œ๊ฐ„์€ 0.5์ดˆ์ด๋ฏ€๋กœ DB๋ฅผ ์ด์šฉํ•œ๋‹ค.
  • DP
    • ํ˜„์žฌ ์œ„์น˜์— 3๊ฐ€์ง€ ์ƒ‰ ๋ณ„ ์ตœ์†Œ๊ฐ’ ๋ˆ„์  : 2์ฐจ์› ๋ฐฐ์—ด dp[N][3]
    • ์ด์ „ ๊ฐ’ ์ค‘ ํ˜„์žฌ ์ƒ‰๊ณผ ๋‹ค๋ฅธ ๋‘ ์ƒ‰ ์ค‘ ์ตœ์†Œ๊ฐ’ ์‚ฌ์šฉ
    • ์ ํ™”์‹ (now๋Š” ํ˜„์žฌ ์ธ๋ฑ์Šค, a๋Š” ํ˜„์žฌ ๋น„์šฉ)
      • dp[now][0] = Math.min(dp[now-1][1], dp[now-1][2])+a[0]
      • dp[now][1] = Math.min(dp[now-1][0], dp[now-1][2])+a[1]
      • dp[now][2] = Math.min(dp[now-1][1], dp[now-1][0])+a[2]

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
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 = null;

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

        int[][] dp = new int[N + 1][3];

        for (int i = 1; i <= N; i++) {
            st = new StringTokenizer(br.readLine());
            dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + Integer.parseInt(st.nextToken());
            dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + Integer.parseInt(st.nextToken());
            dp[i][2] = Math.min(dp[i - 1][1], dp[i - 1][0]) + Integer.parseInt(st.nextToken());
        }

        bw.write(Integer.toString(Math.min(Math.min(dp[N][0], dp[N][1]), dp[N][2])));
        bw.flush();
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • 1๋ถ€ํ„ฐ N๋ฒˆ์งธ ์ง‘์œผ๋กœ R,G,B ๊ฐ ์ƒ‰์„ ์น ํ–ˆ์„ ๋•Œ ์ตœ์†Œ๊ฐ’์„ ๋ˆ„์ ํ•ด๊ฐ„๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ „ํ˜•์ ์ธ DP ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์•„ ์‰ฝ๊ฒŒ ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ๋ฌธ์ œ ๋ถ„์„๊ณผ ํ’€์ด ๊ณ„ํš์„ ์ ์–ด๊ฐ€๋ฉฐ ํ’€์—ˆ๋Š”๋ฐ, ๋ธŒ๋ฃจํŠธ ํฌ์Šค์˜ ์‹œ๊ฐ„ ๊ณ„์‚ฐ์ด ๋ฏธํกํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
    • ์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ ํ…Œ์ŠคํŠธ Bํ˜•์„ ์ค€๋น„ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์—ฐ์‚ฐ ์ˆ˜ ๊ณ„์‚ฐ์— ๋Œ€ํ•œ ์—ฐ์Šต์„ ๋” ์ฒ ์ €ํžˆ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_15663 : N๊ณผ M (9)  (0) 2023.06.11
BOJ_1043 : ๊ฑฐ์ง“๋ง  (0) 2023.06.09
Lv.1 : ๊ณต์› ์‚ฐ์ฑ…  (0) 2023.04.26
Lv.1 : ์ถ”์–ต ์ ์ˆ˜  (0) 2023.04.25
Lv.1 : ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ  (0) 2023.04.25