https://programmers.co.kr/learn/courses/30/lessons/42588?language=cpp
코딩테스트 연습 - 탑
수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다
programmers.co.kr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> heights) {
vector<int> answer;
stack<int> receivedTower;
for(int i = heights.size()-1; i >= 0; i--)
{
//현재 인덱스에서 스택에 값이 넣어졌는지 판별
bool isPushed = false;
//다음 탑의 인덱스부터 검사
for (int j = i - 1; j >= 0; j--)
{
//현재 탑에 인덱스보다 높은 탑을 찾을 경우,(수신할 수 있는 경우)
if (heights[i] < heights[j])
{
//수신할 탑의 인덱스를 스택에 쌓고 , bool변수를 true로 한다.
receivedTower.push(j + 1);
isPushed = true;
break;
}
}
//for문이 돈 후 , 스택에 값이 넣어지지 않았다면 수신이 안된 것.
//0을 스택에 넣어준다.
if (isPushed == false)receivedTower.push(0);
}
for (int i = 0; receivedTower.size(); i++)
{
//반환형이 vector이므로,
//스택의 끝부터 차례대로 벡터에 넣어준다.
answer.push_back(receivedTower.top());
receivedTower.pop();
}
return answer;
}
|
스택을 굳이 안써도 됐지만,
문제 분류가 스택/큐로 되있어서 한번 써보았다.
벡터 answer을 heights.size()로 크기를 할당한 후 ,
수신한 탑의 인덱스를 푸쉬 백 해도 같은 답이 나온다.
'프로그래머스 - 내 풀이 > 프로그래머스 Lv2' 카테고리의 다른 글
프로그래머스 / 스택, 큐 / 프린터 (0) | 2020.06.18 |
---|---|
프로그래머스 / 연습문제 / 124 나라의 숫자 (0) | 2020.06.17 |
프로그래머스 / 스택,큐 / 쇠막대기 (0) | 2020.06.12 |
프로그래머스 / 스택,큐 / 기능 개발 (0) | 2020.06.11 |
프로그래머스 / 스택 , 큐 / 다리를 지나는 트럭 (1) | 2020.06.10 |