공부공간

BOJ - 2493 ) 탑 본문

알고리즘/구현,시뮬

BOJ - 2493 ) 탑

개발자가될수있을까? 2022. 5. 11. 21:30


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

 

2493번: 탑

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

www.acmicpc.net

 


Stack 자료구조를 사용하여 현재까지의 탑의 높이를 저장하여 

 

내 왼쪽의 탑들중 신호를 수신하는 탑을 찾는 문제이다.

 

수신되는 탑을 찾기위하여 현재까지 저장된 높이가 내높이보다 크면 add연산을 진행하고

 

작다면 나보다 큰 높이가 나올때까지 poll연산을 진행한다.


package algorithm_2022;

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

public class boj_2439 {

	public static void main(String[] args) throws IOException {
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
	    int n = Integer.parseInt(st.nextToken());
	    int arr[] = new int[n];
	    int index[] = new int[n];
	    Stack<int[]> s = new Stack<>();
	    st = new StringTokenizer(br.readLine());
	    for(int i=0;i<n;i++) {arr[i] = Integer.parseInt(st.nextToken());}
	    
	    for(int i=n-1;i>=0;i--) {
	    	if(s.isEmpty()) {
	    		s.add(new int[] {arr[i],i});
	    		continue;
	    	}
	    	
	    	if(s.peek()[0] > arr[i]) {
	    		s.add(new int[] {arr[i],i});
	    	} else {
	    	   while(s.peek()[0] < arr[i]) {
	    		   index[s.peek()[1]] = i+1;
	    		   s.pop();
	    		   if(s.isEmpty()) break;
	    	   }
	    	   s.add(new int[] {arr[i],i});
	    	}
	    }
	    StringBuilder sb = new StringBuilder();
	    for(int i=0;i<n;i++) {
	      sb.append(index[i]+" ");	
	    } System.out.println(sb.toString());

    }

}

'알고리즘 > 구현,시뮬' 카테고리의 다른 글

BOJ - 2559 ) 수열  (0) 2022.06.27
BOJ - 21609 ) 상어 중학교  (0) 2022.05.29
BOJ - 21608 ) 상어 초등학교  (2) 2022.04.20
BOJ - 1780 ) 종이의 개수  (0) 2022.03.09
BOJ - 9375 ) 패션왕 신해빈  (0) 2022.03.07
Comments