๐ ๋ฌธ์
https://www.acmicpc.net/problem/1863
๐ป ์ฝ๋
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int N;
vector<int> v;
stack<int> s;
int cnt = 0;
int main() {
cin >> N;
int x, y;
for (int i = 0; i < N; i++) {
cin >> x >> y;
v.push_back(y);
}
v.push_back(0);
for (int i = 0; i < v.size(); i++) {
while (!s.empty() && s.top() >= v[i]) {
if(s.top() > v[i])cnt++;
s.pop();
}
s.push(v[i]);
}
cout << cnt << '\n';
}
๋ฉ๋ชจ๋ฆฌ ๋ฐ ์๊ฐ
๐ก ํ์ด
- vector<int> v; // ์ขํ์ y๊ฐ ์ ์ฅ
- stack<int> s; // ์ค์นด์ด๋ผ์ธ ๊ณ ๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅ
1. ๋ง์ง๋ง ๊ฑด๋ฌผ๊น์ง ํ์ธํ๊ธฐ ์ํด ์ ๋ ฅ ๋ฐ์ y์ขํ ์ ์ฅ ํ 0๊ฐ์ ๋ง์ง๋ง์ ์ ์ฅ
v.push_back(0);
2. ์ ๋ ฅ๋ฐ์ y ์ขํ ๋งํผ (vector v์ ํฌ๊ธฐ) ๋ฐ๋ณต
3. stack์ด ๋น์ด์์ง ์๋ค๋ฉด
3-1. stack.top()์ด ํ์ฌ y์ขํ(v[i])๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด stack.pop()
3-2. stack.top()์ด ํ์ฌ y์ขํ(v[i])๋ณด๋ค ํฌ๋ฉด ๊ฑด๋ฌผ ํ๋๊ฐ ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ cnt(๊ฑด๋ฌผ ๊ฐ์)๋ฅผ ์ฆ๊ฐ
3-3. stack.top()๋ณด๋ค ํ์ฌ y์ขํ(v[i])๊ฐ ์์ผ๋ฉด ํ์ฌ y์ขํ๋ฅผ stack์ push
→ stack์ ์ค๋ฆ์ฐจ์์ผ๋ก y์ขํ ๊ฐ์ ์ ์ฅ
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ 22871] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (large) (0) | 2024.03.17 |
---|---|
[BOJ 2110] ๊ณต์ ๊ธฐ ์ค์น (0) | 2024.03.14 |