티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42588

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 설명

stack 사용했다.

heights 배열을 뒤에서부터 순회하면서 신호 수신이 가능한 탑을 찾고 stack에 넣었다.

뒤에서부터 순회하기 때문에 stack 사용함.

찾으면 break, 수신 가능한 탑이 없으면 0을 push 했다.

 

3. 코드

import java.util.*;

class Solution {
    public int[] solution(int[] heights) {
        int[] answer = new int[heights.length];
        Stack<Integer> stack = new Stack<>();
        for(int i=heights.length-1; i>0; i--) {
            for(int j=i-1; j>=0; j--) {
                if(heights[i]<heights[j]) {
                    stack.push(j+1);
                    break;
                }
                else if(j==0)
                    stack.push(0);
            }
        }
        stack.push(0); // 첫 번째 탑
        
        for(int i=0; i<answer.length; i++)
            answer[i] = stack.pop();
        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday