๊ธฐ๋ก๋ฐฉ

BOJ_17298 : ์˜คํฐ์ˆ˜ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_17298 : ์˜คํฐ์ˆ˜

Soom_1n 2022. 11. 7. 21:20

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

 

17298๋ฒˆ: ์˜คํฐ์ˆ˜

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net



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

  • ๋ฐฐ์—ดarr์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด, ํ•œ ์ธ๋ฑ์Šค i์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” arr[i] ๋ณด๋‹ค ํฐ ๊ฐ’(์˜คํฐ์ˆ˜)์„ ์ •๋‹ต ๋ฐฐ์—ด answer[i]์— ์ €์žฅํ•œ๋‹ค.
  • n์ด 1,000,000(๋ฐฑ๋งŒ)์ด๋ฏ€๋กœ ์ธ๋ฑ์Šค๋งˆ๋‹ค ์˜ค๋ฅธ์ชฝ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋ฉด O(n^2)๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.
  • ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ์˜คํฐ์ˆ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ์ธ๋ฑ์Šค๋งŒ ์Šคํƒ์— ๋‚จ๊ธฐ๋ฉฐ ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • ์Šคํƒ์˜ arr[top]์ด pushํ•˜๋ ค๋Š” arr[i]๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ์ธ๋ฑ์Šค top์˜ ์˜คํฐ์ˆ˜๋Š” arr[i]์ด๋‹ค.
    • ๋ฐฐ์—ด ์ˆœํšŒ๊ฐ€ ๋๋‚˜๋„ ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’๋“ค์€ ์˜คํฐ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ -1๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        int arr[] = new int[n];
        int answer[] = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());

        for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(st.nextToken());

        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < n; i++) {
            while (!stack.empty() && arr[stack.peek()] < arr[i]){
                answer[stack.pop()] = arr[i];
            }
            stack.push(i);
        }

        for (int i : answer){
            if (i == 0)
                sb.append("-1 ");
            else
                sb.append(i + " ");
        }
        System.out.println(sb.toString());
    }
}

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

  • ๋ฐฐ์—ด์˜ ์ˆ˜ n๊ณผ ๋ฐฐ์—ด arr๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ •๋‹ต์„ ์ €์žฅํ•  ๋ฐฐ์—ด answer๋„ ์„ ์–ธํ•œ๋‹ค.
  • ๋ฐฐ์—ด arr๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ arr[top]๊ณผ arr[i]๋ฅผ ๋น„๊ตํ•ด ์Šคํƒ์— ๋„ฃ๊ณ  ๋นผ๋ฉฐ ๋ฐฐ์—ด answer๋ฅผ ์ฑ„์šด๋‹ค.
    • arr[top] < arr[i] ์ด๋ฉด, answer[top] = arr[i]

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—” ์ƒˆ๋กœ์šด ์Šคํƒ ํ™œ์šฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•ด์„œ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ๋ง‰์ƒ ์ดํ•ดํ•˜๊ณ ๋ณด๋‹ˆ ๊ฐ„๋‹จํ•œ ์›๋ฆฌ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

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

BOJ_11286 : ์ ˆ๋Œ“๊ฐ’ ํž™  (0) 2022.11.07
BOJ_2164 : ์นด๋“œ2  (0) 2022.11.07
BOJ_1874 : ์Šคํƒ ์ˆ˜์—ด  (0) 2022.11.07
BOJ_11003 : ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ  (0) 2022.11.03
BOJ_12891 : DNA ๋น„๋ฐ€๋ฒˆํ˜ธ  (0) 2022.11.03