[Algorithm] Programmers 탑 (stack)

문제 : 수평 직선에 탑 N대를 세웠다. 모든 탑에서 왼쪽으로 신호를 보내고 신호는 보낸 탑보다 높은 탑에서만 수십한다. 한 번 수신된 신호는 다른 탑으로 송신되지 않는다. 맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 heights가 매개변수로 주어질 때 각 탑이 쏜 신호를 어느 탑에서 받았는지 기록한 배열을 return 하도록 solution함수를 작성하라.


  • heights는 길이 2이상 100 이하 정수 배열
  • 모든 탑의 높이는 1이상 100 이하
  • 신호를 수신하는 탑이 없으면 0으로 표시
입출력 예 :

heightsreturn
[6,9,5,7,4][0,0,2,2,4]
[3,9,9,3,5,7,2][0,0,0,3,3,3,6]
[1,5,3,6,7,6,5][0,0,2,0,0,5,6]


내가 쓴 답 :


#include <string>
#include <vector>
#include <iostream>
#include <stack>
 
using namespace std;
 
vector<int> solution(vector<int> heights) {
    vector<int> answer;
    stack<int> s;
 
     for(auto it_h = heights.begin();it_h!=heights.end(); ++it_h ){
         for (auto it_temp :heights){
             s.push(it_temp); 
            if(it_h == heights.begin()) break;
             if(s.size()==it_h-heights.begin()) break;
        }
        
        int t=s.size();
        while(1){
            
            if(s.top()>*it_h){
                answer.push_back(t);
                break;
            }
            else s.pop();
            t--;
            if(s.empty()) {
                answer.push_back(0);
                break;
            }
        }
        while(!s.empty())s.pop();
         
     }
   return answer;
}
cs







No comments:

Powered by Blogger.