백준 2493 - 탑

Updated:

Java

2493 번 - 탑

문제

상근이네 반의 N명 학생들의 이름이 성적순으로 주어졌을 때, 좋은 친구가 몇 쌍이나 있는지 구하는 프로그램을 작성하시오. 좋은 친구는 등수의 차이가 K보다 작거나 같으면서 이름의 길이가 같은 친구이다.

접근 방법

구현

코드

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

public class Main {
    public static void main(String []args) throws IOException {        
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;
    	int n = stoi(br.readLine());
    	int tower[] = new int[n + 1];
    	stk = new StringTokenizer(br.readLine());
    	for(int i = 1; i <= n; i++) {
    		tower[i] = stoi(stk.nextToken());
    	}
    	int result[] = new int[n+1];
    	Stack<int[]> st = new Stack<int[]>();
    	for(int i = n; i >= 1; i--) {
    		if(!st.empty() && st.peek()[0] <= tower[i]) {
    			while(!st.empty() && st.peek()[0] <= tower[i])
	    			result[st.pop()[1]] = i;
    		}
    		st.push(new int[]{tower[i],i});
    	}
    	for(int i = 1; i <= n; i++)
    		System.out.print(result[i] + " ");
    	
    	br.close();
    }
    
    static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

난이도

★★★★★

후기

개선할 점