728x90
개요
https://www.acmicpc.net/problem/3015
P5 자력솔 !
본문
힌트
- 스택을 활용
- 같은 키가 연속으로 push되는 경우를 고려
풀이
더보기
- 스택 자료구조를 활용하여 입력을 받음과 동시에 top과 비교하여 처리
(선행 문제 : BOJ 2493번 탑) - top이 더 클 경우 : result += (pop한 개수 + 1)개 후 push(키, 1(연속 1회를 의미))
- top과 같을 경우 : result += (pop한 개수 + 연속된 횟수) 후 push(키, 연속된 횟수)
- top이 더 작을 경우 : pop한 개수 += 1 후 pop()
코드
더보기
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
stack <pair<ll, int>> s;
ll result;
ll sumNum;
int main(){
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
ll h;
for(int i=0; i<n; i++){
sumNum = 0;
cin >> h;
while(true)
{
if(s.empty())
{
result += sumNum;
s.push({h, 1});
break;
}
else if(s.top().first > h)
{
result += sumNum + 1;
s.push({h, 2});
break;
}
else if(s.top().first == h)
{
result += sumNum + s.top().second;
s.push({h, s.top().second + 1});
break;
}
else
{
sumNum++;
s.pop();
}
}
}
cout << result;
}
'알고리즘&자료구조 > 문제' 카테고리의 다른 글
[BOJ/10090] Counting Inversions (C++) (2) | 2023.11.23 |
---|---|
[BOJ/2042] 구간 합 구하기 (C++) (1) | 2023.11.22 |
[BOJ/22953번] 도도의 음식 준비 (C++/이분탐색) (1) | 2023.09.18 |
[프로그래머스] 체육복 (C++) (0) | 2023.09.16 |
[BOJ/2230번] 수 고르기 (C++/투포인터) (0) | 2023.09.16 |