본문 바로가기
백준/1 - 5000

[백준] 2493번 : 탑 (JAVA)

by lms0806 2021. 7. 12.
728x90
반응형

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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

풀이

저는 Stack int 배열을 이용해 풀었습니다.

처음에 테스트 케이스를 받고 그 수만큼 반복해줍니다.

처음 수를 받자마자 넣는 것이 아니라 stack이 비어있는 체크부터 해줍니다.(처음엔 어차피 0이므로)

stack에서 꺼낼려고 하는 수가 입력받은 수보다 크면 꺼낼려고 하는수의 배열 0번째(위치)를 출력해줍니다.

아닐 경우 스택에서 값을 빼줍니다.

 

스택이 비어있을 경우 아무도 신호를 받지 못하므로 0을 출력해줍니다.

Stack에는 {위치, 값}을 입력해줍니다.

 

소스코드

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 NumberFormatException,IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        Stack<int[]> stack = new Stack<>();
        
        int size = Integer.parseInt(br.readLine());
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        for(int i = 1; i <= size; i++) {
            int num = Integer.parseInt(st.nextToken());
            while(!stack.isEmpty()) {
                if(stack.peek()[1] >= num) {
                    sb.append(stack.peek()[0]).append(" ");
                    break;
                }
                stack.pop();
            }
            if(stack.isEmpty()) {
                sb.append("0 ");
            }
            stack.push(new int[] {i, num});
        }
        System.out.print(sb);
    }
}

 

728x90
반응형

댓글