[Algorithm] Programmers 탑 (stack)
문제 : 수평 직선에 탑 N대를 세웠다. 모든 탑에서 왼쪽으로 신호를 보내고 신호는 보낸 탑보다 높은 탑에서만 수십한다. 한 번 수신된 신호는 다른 탑으로 송신되지 않는다. 맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 heights가 매개변수로 주어질 때 각 탑이 쏜 신호를 어느 탑에서 받았는지 기록한 배열을 return 하도록 solution함수를 작성하라.
- heights는 길이 2이상 100 이하 정수 배열
- 모든 탑의 높이는 1이상 100 이하
- 신호를 수신하는 탑이 없으면 0으로 표시
입출력 예 :
heights | return |
---|---|
[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: