알고리즘/문제 풀이
백준 17608 - 막대기(C++)
qqlzzb
2022. 11. 8. 23:17
문제
https://www.acmicpc.net/problem/17608
17608번: 막대기
아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로
www.acmicpc.net
풀이
오른쪽에서 봤을 때, 몇 개의 막대기가 보이는지 맞추는 문제이다.
현재 가장 긴 막대기의 길이를 계속 업데이트해 가면서 막대기들을 하나하나 비교해 가면 된다.
stack을 이용하여 풀이할 수 있는 문제이다.
stack에는 가장 늦게 들어온 수가 맨 위에 존재하게 되므로 오른쪽부터 고려할 수 있게 된다.
스택의 맨 위에 있는 수가 가장 긴 막대기의 길이보다 길다면 결과값을 증가시킨다.
코드
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int tall=0;
stack<int> s;
int n;
cin>>n;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
s.push(a);
}
int res=0;
while(s.size())
{
if(tall<s.top())
{
tall=s.top();
res++;
}
s.pop();
}
cout<<res;
}