알고리즘/문제 풀이

백준 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;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 11292 - 키 큰 사람(C++)  (0) 2022.12.04
백준 4470 - 줄번호  (0) 2022.11.17
백준 9933 - 민균이의 비밀번호(C++)  (0) 2022.10.30
백준 10826 - 피보나치 수 4(C++)  (0) 2022.10.13
백준 9251 - LCS (C++)  (0) 2022.09.13