hades

[Baekjoon] 6198๋ฒˆ: ์˜ฅ์ƒ ์ •์› ๊พธ๋ฏธ๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 6198๋ฒˆ: ์˜ฅ์ƒ ์ •์› ๊พธ๋ฏธ๊ธฐ

hades1 2024. 9. 13. 16:33

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/6198

 

๐Ÿ” ์„ค๊ณ„

์ฒ˜์Œ์—๋Š” ๋ฒกํ„ฐ์— ๋†’์ด๋“ค์„ ๋ชจ๋‘ ์ €์žฅํ•˜๊ณ , ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N^2)์— ์˜ํ•ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

 

๊ฑด๋ฌผ ๊ด€๋ฆฌ์ธ๋“ค์€ ์˜ค๋ฅธ์ชฝ๋งŒ ๋ณด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฑด๋ฌผ ํ•˜๋‚˜์˜ ๋†’์ด๋ฅผ ๊ณ ๋ คํ•˜๋ฉด์„œ, ์Šคํƒ์— ๊ทธ ๊ฑด๋ฌผ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฑด๋ฌผ๋“ค์„ ์ €์žฅํ•œ๋‹ค. 

 

๋งŒ์•ฝ, ์ƒˆ๋กœ์šด ๊ฑด๋ฌผ์˜ ๋†’์ด๋ณด๋‹ค ๊ทธ ์ „์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๋†’์ด๊ฐ€ ๋‚ฎ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ๊ฑด๋ฌผ๊ณผ ์ดํ›„์— ๋‚˜์˜ค๋Š” ๊ฑด๋ฌผ๋“ค์„ ๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด์ œ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง€์šด๋‹ค.

 

๋งŒ์•ฝ, ์ƒˆ๋กœ์šด ๊ฑด๋ฌผ์˜ ๋†’์ด๋ณด๋‹ค ๊ทธ ์ „์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๋†’์ด๊ฐ€ ๋†’๋‹ค๋ฉด, ๊ทธ ๊ฑด๋ฌผ์—์„œ ์ƒˆ๋กœ์šด ๊ฑด๋ฌผ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์Šคํƒ์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

int n, h;
long long result = 0;
stack<int> s;

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> h;
		while (!s.empty() && s.top() <= h) {
			s.pop();
		}
		if (s.empty()) {
			s.push(h);
		}
		else if (s.top() > h) {
			result += s.size();
			s.push(h);
		}
	}
	
	cout << result << "\n";
	return 0;
}

 

๐Ÿ“ ๋ฉ”๋ชจ

๋ชจ๋‘ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ, 79999 + 79998 + ... + 1 = 80000 * 40000์œผ๋กœ int ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค.