๊ธฐ๋ก๋ฐฉ

BOJ_11054 : ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด ๋ณธ๋ฌธ

CodingTest/Java

BOJ_11054 : ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

Soom_1n 2024. 3. 10. 20:01

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

 

11054๋ฒˆ: ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ˆ˜์—ด A๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)

www.acmicpc.net



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

  • ์ค‘๊ฐ„ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ํ›„ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์ด์–ด์ง€๋Š” ์ˆ˜์—ด์„ ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ฃผ์–ด์ง€๋Š” ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๊ฐ ์ธ๋ฑ์Šค ๋ณ„๋กœ ๊ฐ€์žฅ ๊ธด ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆ˜์—ด๊ณผ ๊ฐ€์žฅ ๊ธด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๋”ฐ๋กœ ๊ตฌํ•ด ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ™์€ ์ธ๋ฑ์Šค์˜ ๋‘ ๊ฐ’์˜ ํ•ฉ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

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));

        int N = Integer.parseInt(br.readLine());
        int[] A = new int[N];
        int[] up = new int[N];
        int[] down = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }

        // ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด
        for (int i = 1; i < N; i++) {
            for (int j = 0; j < i; j++) {
                if (A[i] > A[j])
                    up[i] = Math.max(up[i], up[j] + 1);
            }
        }
        // ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด
        for (int i = N - 1; i >= 0; i--) {
            for (int j = i + 1; j < N; j++) {
                if (A[i] > A[j])
                    down[i] = Math.max(down[i], down[j] + 1);
            }
        }

        int max = 0;
        for (int i = 0; i < N; i++) {
            max = Math.max(max, up[i] + down[i]);
        }

        bw.write(Integer.toString(max + 1));
        bw.flush();
    }

}

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

  • ์ฃผ์–ด์ง„ ์ˆ˜์—ด์„ intํ˜• ๋ฐฐ์—ด A์— ์ €์žฅ ํ›„ ์•ž์—์„œ ๋’ค๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋’ค์—์„œ ์•ž์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•ด ๊ฐ„๋‹ค.
    • ์ ํ™”์‹์€ max(ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’, ์ง€๋‚˜์˜จ ์ธ๋ฑ์Šค๋“ค์˜ ์ตœ๋Œ€๊ฐ’ +1) ์ด๋‹ค.
    • ์—ฌ๊ธฐ์„œ ์ง€๋‚˜์˜จ ์ธ๋ฑ์Šค์˜ A๋ฐฐ์—ด ๊ฐ’์ด ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ A๋ฐฐ์—ด ๊ฐ’๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ตฌํ•ด์ง„ up, down intํ˜• ๋ฐฐ์—ด๋“ค์„ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ ๋”ํ•ด์„œ ์ตœ๋Œ€๊ฐ’+1์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • +1์„ ํ•˜๋Š” ์ด์œ ๋Š” ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ์›์†Œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—” N์ด 1000์œผ๋กœ ์ž‘์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ํ’€๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ DFS๋กœ ๊ณ„์‚ฐํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
  • ๊ฐ€์žฅ ๊ธด ์˜ค๋ฆ„์ฐจ์ˆœ ๋ถ€๋ถ„ ์ˆ˜์—ด๊ณผ ๊ฐ€์žฅ ๊ธด ๋‚ด๋ฆผ์ฐจ์ˆœ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด๋ผ๋Š” ํžŒํŠธ๋ฅผ ๋ณด๊ณ  ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

728x90

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

BOJ_2166 : ๋‹ค๊ฐํ˜•์˜ ๋ฉด์   (0) 2024.03.11
BOJ_13172 : ฮฃ  (0) 2024.03.10
BOJ_11779 : ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ 2  (0) 2024.03.02
BOJ_9935 : ๋ฌธ์ž์—ด ํญ๋ฐœ  (0) 2024.03.01
BOJ_1033 : ์นตํ…Œ์ผ  (0) 2024.02.29