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;
}
}