🐣 알고리즘 삐약/💻 백준 삐약

44 삐약 : 백준 6198| 옥상정원 꾸미기 [바킹독 문제 풀이|스택|JAVA]

우주수첩 2023. 11. 16. 10:34
728x90

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

 

6198번: 옥상 정원 꾸미기

문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으

www.acmicpc.net

 

package BKD_0x5_Stack;

import java.io.*;
import java.util.Stack;

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

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

        Stack<Integer> st = new Stack<>();
        long result=0;

        for(int i=0;i<n;i++){
            int input_num = Integer.parseInt(br.readLine());
            while (!st.isEmpty() && st.peek( )<= input_num) st.pop();

            st.push(input_num);
            result += st.size()-1;
        }

        System.out.println(result);
        br.close();


    }
}

 

 

 

👀 주목주목 👀

 

입력 조건
첫 번째 줄에 빌딩의 개수 N이 입력된다.(1 ≤ N ≤ 80,000)

 

N의 값이 주어진 조건에서의 최대값일 때 모든 건물이 내림차순 일 경우의 결과값은

 

79999+79998 ... +1 = 80000*80001/2 => 32억이 넘어 int로 표기할 수 있는 범위를 벗어나게 된다.

 

이를 해결하기 위해서는 결과값을 저장하는 변수를 long으로 선언하여 코드를 구현하도록 해야 한다.

 

이거때매 틀렸었음

 

 

 

stack.size()-1이 의미하는것 

  • 현재 들어오는 높이의 건물이 보이는 좌측 건물의 개수
  • == input 건물을 관리할 수 있는 좌측 건물의 개수

 

 

 

stack에 남아있는 값의 의미

  • 우측에 관리가능한 아파트가 존재함을 의미

 

 

 

728x90