Code IT/Algorithm

[프로그래머스] 탑 - Stack (Java)

2021. 4. 3. 02:23
import java.util.*;

class stack {
	// 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신한다
	// 한 번 수신된 신호는 다른 탑으로 송신 되지 않는다.
	// 다시한번 말하지만 스택은 LIFO다
	public int[] solution(int[] heights) {
		Stack<Integer> st = new Stack<Integer>();
		for (int i = heights.length - 1; i >= 0; i--) {
			if (i == 0) { // 하나만 입력했다면 답은 0
				st.push(0);
				break;
			}
			for (int j = i - 1; j >= 0; j--) { //i에 대하여 그보다 앞의 값들을 보자
				if (heights[i] < heights[j]) { //앞의 탑의 키가 더 크면 바로 push()
					st.push(j + 1); //0번째 탑은 없고 1번째 부터 시작이므로 +1은 필수
					break; //송신은 한 탑에만 
				}
				if (j == 0) {
					st.push(0); //맨 앞 탑에 대한 답은 무조건 0
					break;
				}
			}
		}
		int[] answer = {};
		answer = new int[st.size()];
		for (int i = 0; i < answer.length; i++) {
			answer[i] = st.pop();//배열 뒤부터 답을 찾아 push했으므로 (LIFO이므로) 그대로 pop 계속 해주면 된다
		}
		return answer;
	}
}