구름LEVEL
구름LEVEL 문제를 풀이하고 부족한 부분을 보완하며 실력을 키워보세요. 구름LEVEL은 코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입
level.goorm.io
풀이
스택을 이용하는 문제
문제에 나와있는
** A 산봉우리에서 B산봉우리를 보기 위한 조건?
1. A가 B보다 왼쪽에 있어야 하고 (A < B)
2. A와 B 사이에 있는 모든 산봉우리가 A보다 작아야 한다
라는 조건을 활용
산봉우리를 왼쪽부터 순서대로 선택
스택의 top을 살펴보고, 현재 선택된 산봉우리보다 작으면 pop
>> 왜? 현재 선택된 산봉우리보다 작은 산봉우리는 현재 선택된 산봉우리를 포함하여 오른쪽에 있는 모든 산봉우리도 볼 수 없기 때문에
현재의 값을 push 하면 스택의 크기가 선택된 산봉우리를 볼 수 있는 산봉우리의 개수가 됨
int main() {
int n; // 산봉우리 개수
cin >> n;
stack<int> s;
vector<int> answer; // 정답을 담을 vector
answer.push_back(0); // 제일 왼쪽 산봉우리는 바라보는 신선이 없으므로 항상 0
for (int i = 1; i < n; i++) {
int input; // 산봉우리의 높이 입력
cin >> input;
// 스택이 비어있지 않고, top() 보다 input의 값이 크거나 같다면
while (!s.empty() && s.top() <= input)
s.pop(); // 스택의 값을 pop
// 그 후 스택에 현재 input을 push
s.push(input);
// 스택의 size를 answer vector에 저장
answer.push_back(s.size());
}
// 정답 출력
for (auto a : answer)
cout << a << " ";
return 0;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[구름] 어부의 고기잡이 C++ (0) | 2023.07.10 |
---|---|
[구름] 단풍나무 C++ (0) | 2023.07.10 |
[구름] 현대모비스 예선-주차시스템 C++ (0) | 2023.07.07 |
[프로그래머스] 124나라의 숫자 C++ (0) | 2022.08.16 |
[프로그래머스] 올바른 괄호 C++ (0) | 2022.08.14 |