250916

lililllilillll·2025년 9월 16일

개발 일지

목록 보기
296/350

✅ 한 것들


  • 백준


⚔️ 백준


6549 히스토그램에서 가장 큰 직사각형

#include"6549.h"
using namespace std;
typedef long long ll;

void B6549::Solution()
{
	// 스택에 하나씩 넣는다
	// 스택 맨 위가 자기보다 크다면, 자기보다 작은 놈이 나올 때까지 빼면서 갖고있던 너비를 더한 다음 최댓값을 지정한다
	// 스택 맨 위가 자기보다 작다면, 너비 1로 새로 높이를 넣어준다.

	// 다 넣었다면, 스택에 있는거 다 꺼내면서
	// 자기 자신의 너비 x 높이 한 후에
	// 다음 맨 위 값에 자신의 너비를 넘겨준다

	while (true)
	{
		int count;
		cin >> count;
		if (count == 0) break;

		ll maxSize = 0;
		stack<vector<ll>> st;
		while (count--)
		{
			ll w, h;
			cin >> h;
			w = 1;

			if (!st.empty() && st.top()[0] > h)
			{
				ll temph;
				ll tempw = 0;
				while (!st.empty() && st.top()[0] > h)
				{
					temph = st.top()[0];
					tempw += st.top()[1];
					maxSize = max(maxSize, temph * tempw);
					st.pop();
				}
				w += tempw;
			}

			maxSize = max(maxSize, h * w);
			st.push({ h,w });
		}

		ll temph;
		ll tempw = 0;
		while (!st.empty())
		{
			temph = st.top()[0];
			tempw += st.top()[1];
			maxSize = max(maxSize, temph * tempw);
			st.pop();
		}

		cout << maxSize << '\n';
	}
}
  • long long 안 써서 틀렸습니다 떴었다


profile
너 정말 **핵심**을 찔렀어

0개의 댓글