ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 6198 옥상 정원 꾸미기 #JAVA
    Algorithm Solving/BAEKJOON 2021. 1. 31. 00:10

     

    BAEKJOON [6198] 옥상 정원 꾸미기


    코드


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Stack;
    
    public class Main {
    
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		int n = Integer.parseInt(br.readLine());
    		long result = 0;	// (1+80000) /2 * 80000 > Integer.MAX_VALUE
    		//System.out.println(Integer.MAX_VALUE);
    		//> 2147483647
    		int temp;	
    		
    		Stack<Integer> stack = new Stack<>();
    		
    		for (int i = 0; i < n; i++) {
    			temp = Integer.parseInt(br.readLine());
    			
    			// 해당 건물 높이보다 같거나 작으면 삭제하여 처리한다.
    			while(!stack.isEmpty() && stack.peek() <= temp) { //같은 층도 볼 수 없다.
    				stack.pop();
    			}
    			
    			result += stack.size();
    			stack.push(temp);
    				
    		}
    		
    		System.out.println(result);
    	}
    
    }
    

     

     

     

    풀이


    • Stack 사용
    • 해당 건물보다 낮은 건물을 스택에서 제외시킨다. (문제 조건 동일한 층수도 정원을 볼 수 없다.)
    • result를 int 가 아닌 long으로 선언했는데 80000만개의 건물이 내림차순으로 있을 경우 int의 범위를 벗어난다. 3,200,040,000 이다. 

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

    'Algorithm Solving > BAEKJOON' 카테고리의 다른 글

    [백준] 1300 K번째 수 #JAVA  (0) 2021.02.01
    [백준] 1021 회전하는 큐 #JAVA  (0) 2021.01.31
    [백준] 2493 탑 #JAVA  (0) 2021.01.30
    [백준] 1874 스택 수열 #JAVA  (0) 2021.01.30
    [백준] 1158 요세푸스 #JAVA  (0) 2021.01.29

    댓글