๊ธฐ๋ก๋ฐฉ

BOJ_11053 : ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด ๋ณธ๋ฌธ

CodingTest/Java

BOJ_11053 : ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

Soom_1n 2023. 1. 29. 15:12

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

 

11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด

www.acmicpc.net



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

  • n๊ฐœ์˜ ์ˆ˜์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ , ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค ๋ณ„ ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ธธ์ด์˜ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•˜๋Š” dp๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
    • ๊ฐ ์ธ๋ฑ์Šค์˜ ์ˆ˜๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ ๋์„ ๋•Œ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๊ทธ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
      • ๊ฐ ์ธ๋ฑ์Šค์˜ ์•ž์ชฝ์—์„œ ์ˆ˜์—ด ์›์†Œ๊ฐ’์ด ๋” ์ž‘์€ ๊ฒƒ๋“ค ์ค‘ dp๋ฐฐ์—ด ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
      • ๊ตฌํ•œ ๊ฐ’์— +1ํ•ด์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ dp๋ฐฐ์—ด ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
    • ์ˆ˜์—ด์˜ ์ˆœ์„œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. (์ •๋ ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.)
    • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ฐ’์ด ๋ฌด์กฐ๊ฑด ์ตœ๋Œ€๊ฐ’์ธ๊ฑด ์•„๋‹ˆ๋‹ค.
    • ์˜ˆ์ œ ์ˆ˜์—ด์— ์ ์šฉํ•ด dp๋ฐฐ์—ด์„ ๊ตฌํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      • 0๋ฒˆ ์ธ๋ฑ์Šค '10'์€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 1์ด๋‹ค.
      • 1๋ฒˆ ์ธ๋ฑ์Šค '20'์€ '10'-'20' ์œผ๋กœ 2์ด๋‹ค.
      • 2๋ฒˆ ์ธ๋ฑ์Šค '10'์€ 1์ด๋‹ค.
      • 3๋ฒˆ ์ธ๋ฑ์Šค '30'์€ '10'-'20'-'30' ์œผ๋กœ 3์ด๋‹ค.
      • 4๋ฒˆ ์ธ๋ฑ์Šค '20'์€ '10'-'20'์œผ๋กœ 2๋‹ค.
      • 5๋ฒˆ ์ธ๋ฑ์Šค '50'์€ '10'-'20'-'30'-'50'์œผ๋กœ 4์ด๋‹ค.
      • ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค 0-1-3-5๊ฐ€ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด๋‹ค.

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        int[] dp = new int[n];

        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
            dp[i] = 1;
        }

        int max = 0;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (arr[j] < arr[i])
                    dp[i] =  Math.max(dp[i], dp[j] + 1);
            }
            max = Math.max(max, dp[i]);
        }
        System.out.println(max);
    }
}

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

  • n ํฌ๊ธฐ์˜ ์ˆ˜์—ด์„ ์ž…๋ ฅ๋ฐ›์„ ๋ฐฐ์—ด arr์™€ dp๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    • dp๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’์€ 1์ด๋‹ค. (์ˆ˜์—ด์ด ๋‚ด๋ฆผ์ฐจ์ˆœ์ธ ๊ฒฝ์šฐ ๋ชจ๋‘ 1์ด๋‚˜์˜ด)
  • max๋Š” dp ๋ฐฐ์—ด์˜ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
  • arr๋ฐฐ์—ด์˜ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ n-1 ์ธ๋ฑ์Šค ๊นŒ์ง€ ์ˆ˜์—ด์˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‘๊ณ  ๊ณ„์‚ฐ ํ•ด๋ณด๋ฉฐ dp๋ฐฐ์—ด์„ ์ฑ„์šด๋‹ค.
    • arr[0]๋ถ€ํ„ฐ arr[i-1] ๊นŒ์ง€ ์ค‘ arr[i]๋ณด๋‹ค ๊ฐ’์ด ์ž‘์€ ๊ฒƒ๋“ค ์ค‘ dp๋ฐฐ์—ด์˜ ๊ฐ’์ด ์ตœ๋Œ€์ธ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
      • dp[i]๊ฐ€ ํฌ๋‹ค๋ฉด ์œ ์ง€, dp[j]+1์ด ๋” ํฌ๋‹ค๋ฉด ๋ณ€๊ฒฝํ•œ๋‹ค.
    • max๋„ ๊ฒ€์‚ฌํ•ด์„œ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • max๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • '๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด' ์˜ ๋œป์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ์ฐธ๊ณ ํ–ˆ๋‹ค.
  • ๋‚œ ์ฒ˜์Œ ๋ดค์ง€๋งŒ ์‹œ๋ฆฌ์ฆˆ๊ฐ€ ๋งŽ์€ ๊ฒƒ์„ ๋ณด๋‹ˆ dp๋ฌธ์ œ๋กœ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๋“ฏ ํ•˜๋‹ค.

728x90