BOJ 2493. ν
πββοΈ[Gold V] ν - 2493
μ±λ₯ μμ½
λ©λͺ¨λ¦¬: 6300 KB, μκ°: 104 ms
λΆλ₯
μλ£ κ΅¬μ‘°, μ€ν
μ μΆ μΌμ
2024λ 2μ 6μΌ 15:33:46
λ¬Έμ μ€λͺ
KOI ν΅μ μ°κ΅¬μλ λ μ΄μ λ₯Ό μ΄μ©ν μλ‘μ΄ λΉλ° ν΅μ μμ€ν κ°λ°μ μν μ€νμ νκ³ μλ€. μ€νμ μνμ¬ μΌμ§μ μμ Nκ°μ λμ΄κ° μλ‘ λ€λ₯Έ νμ μν μ§μ μ μΌμͺ½λΆν° μ€λ₯Έμͺ½ λ°©ν₯μΌλ‘ μ°¨λ‘λ‘ μΈμ°κ³ , κ° νμ κΌλκΈ°μ λ μ΄μ μ‘μ κΈ°λ₯Ό μ€μΉνμλ€. λͺ¨λ νμ λ μ΄μ μ‘μ κΈ°λ λ μ΄μ μ νΈλ₯Ό μ§νλ©΄κ³Ό νννκ² μν μ§μ μ μΌμͺ½ λ°©ν₯μΌλ‘ λ°μ¬νκ³ , νμ κΈ°λ₯ λͺ¨λμλ λ μ΄μ μ νΈλ₯Ό μμ νλ μ₯μΉκ° μ€μΉλμ΄ μλ€. νλμ νμμ λ°μ¬λ λ μ΄μ μ νΈλ κ°μ₯ λ¨Όμ λ§λλ λ¨ νλμ νμμλ§ μμ μ΄ κ°λ₯νλ€.
μλ₯Ό λ€μ΄ λμ΄κ° 6, 9, 5, 7, 4μΈ λ€μ― κ°μ νμ΄ μν μ§μ μ μΌλ ¬λ‘ μ μκ³ , λͺ¨λ νμμλ μ£Όμ΄μ§ ν μμμ λ°λ λ°©ν₯(μΌμͺ½ λ°©ν₯)μΌλ‘ λμμ λ μ΄μ μ νΈλ₯Ό λ°μ¬νλ€κ³ νμ. κ·Έλ¬λ©΄, λμ΄κ° 4μΈ λ€μ― λ²μ§Έ νμμ λ°μ¬ν λ μ΄μ μ νΈλ λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ΄ μμ μ νκ³ , λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄, λμ΄κ° 5μΈ μΈ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄ μμ μ νλ€. λμ΄κ° 9μΈ λ λ²μ§Έ νκ³Ό λμ΄κ° 6μΈ μ²« λ²μ§Έ νμ΄ λ³΄λΈ λ μ΄μ μ νΈλ μ΄λ€ νμμλ μμ μ νμ§ λͺ»νλ€.
νλ€μ κ°μ Nκ³Ό νλ€μ λμ΄κ° μ£Όμ΄μ§ λ, κ°κ°μ νμμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μ΄λ νμμ μμ νλμ§λ₯Ό μμλ΄λ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫째 μ€μ νμ μλ₯Ό λνλ΄λ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 1 μ΄μ 500,000 μ΄νμ΄λ€. λμ§Έ μ€μλ Nκ°μ νλ€μ λμ΄κ° μ§μ μμ λμΈ μμλλ‘ νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. νλ€μ λμ΄λ 1 μ΄μ 100,000,000 μ΄νμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ£Όμ΄μ§ νλ€μ μμλλ‘ κ°κ°μ νλ€μμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μμ ν νλ€μ λ²νΈλ₯Ό νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μΆλ ₯νλ€. λ§μ½ λ μ΄μ μ νΈλ₯Ό μμ νλ νμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
πνμ΄
stackμ μ΄μ©ν λ¬Έμ μ΄λ€.
void solve()
{
int n;
stack<pair<int, int>> s;
cin >> n;
for (int i = 0; i < n; ++i)
{
int height;
cin >> height;
while (s.empty() == false)
{
if (height < s.top().second)
{
cout << s.top().first << " ";
break;
}
s.pop();
}
if (s.empty())
cout << 0 << " ";
s.push({ i + 1, height });
}
}
κ°μ μ
λ ₯λ°μ λ μ€νμ 체ν¬νλ€.
μ€νμ 체ν¬ν λ s.empty() == false
λΌλ©΄ 0 μ μΆλ ₯νλ€.
μ€νμ΄ μμΌλ©΄ μ
λ ₯λ°μ νμ λμ΄μ μ€νμ top μ λμ΄μ λΉκ΅νλ€.
μ€νμ΄ λ μμΌλ©΄ popμ νλ€.
μλλ©΄ μ€νμ νμ μΈλ±μ€λ₯Ό μΆλ ₯νλ€.
μ΄κ²½μ°μλ μ€νμ΄ λ¨μμλ κ²½μ°μ΄λ€.
κ·Έλ¬κ³ μ λ ₯λ°μ νμ μΈλ±μ€μ νμ λμ΄λ₯Ό μ€νμ νΈμ¬νλ€.
πμ 체 μ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <stack>
#include <queue>
using namespace std;
void solve()
{
int n;
stack<pair<int, int>> s;
cin >> n;
for (int i = 0; i < n; ++i)
{
int height;
cin >> height;
while (s.empty() == false)
{
if (height < s.top().second)
{
cout << s.top().first << " ";
break;
}
s.pop();
}
if (s.empty())
cout << 0 << " ";
s.push({ i + 1, height });
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}