[λ°±μ€] 11286λ² - μ λκ° ν (C++)
11286λ²: μ λκ° ν
첫째 μ€μ μ°μ°μ κ°μ N(1≤N≤100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ μ°μ°μ λν μ 보λ₯Ό λνλ΄λ μ μ xκ° μ£Όμ΄μ§λ€. λ§μ½ xκ° 0μ΄ μλλΌλ©΄ λ°°μ΄μ xλΌλ κ°μ λ£λ(μΆκ°νλ) μ°μ°μ΄κ³ , xκ° 0
www.acmicpc.net
λ¬Έμ
μ λκ° νμ λ€μκ³Ό κ°μ μ°μ°μ μ§μνλ μλ£κ΅¬μ‘°μ΄λ€.
- λ°°μ΄μ μ μ x (x ≠ 0)λ₯Ό λ£λλ€.
- λ°°μ΄μμ μ λκ°μ΄ κ°μ₯ μμ κ°μ μΆλ ₯νκ³ , κ·Έ κ°μ λ°°μ΄μμ μ κ±°νλ€. μ λκ°μ΄ κ°μ₯ μμ κ°μ΄ μ¬λ¬κ°μΌ λλ, κ°μ₯ μμ μλ₯Ό μΆλ ₯νκ³ , κ·Έ κ°μ λ°°μ΄μμ μ κ±°νλ€.
νλ‘κ·Έλ¨μ μ²μμ λΉμ΄μλ λ°°μ΄μμ μμνκ² λλ€.
μ λ ₯
첫째 μ€μ μ°μ°μ κ°μ N(1≤N≤100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ μ°μ°μ λν μ 보λ₯Ό λνλ΄λ μ μ xκ° μ£Όμ΄μ§λ€. λ§μ½ xκ° 0μ΄ μλλΌλ©΄ λ°°μ΄μ xλΌλ κ°μ λ£λ(μΆκ°νλ) μ°μ°μ΄κ³ , xκ° 0μ΄λΌλ©΄ λ°°μ΄μμ μ λκ°μ΄ κ°μ₯ μμ κ°μ μΆλ ₯νκ³ κ·Έ κ°μ λ°°μ΄μμ μ κ±°νλ κ²½μ°μ΄λ€. μ λ ₯λλ μ μλ -231λ³΄λ€ ν¬κ³ , 231λ³΄λ€ μλ€.
μΆλ ₯
μ λ ₯μμ 0μ΄ μ£Όμ΄μ§ νμλ§νΌ λ΅μ μΆλ ₯νλ€. λ§μ½ λ°°μ΄μ΄ λΉμ΄ μλ κ²½μ°μΈλ° μ λκ°μ΄ κ°μ₯ μμ κ°μ μΆλ ₯νλΌκ³ ν κ²½μ°μλ 0μ μΆλ ₯νλ©΄ λλ€.
νμ΄κ³Όμ
ν΄λΉ λ¬Έμ λ₯Ό μ΄λ»κ² μ κ·Όν κΉ κ³ λ―Όμ νλ€κ° μ°μ μμ νλ₯Ό μμλ²μ κ³Ό μμλ²μ 2κ°λ‘ λλμ΄μ νμ΄λ₯Ό μ§ννμλ€.
κ·Έλ₯ λ€μ΄μ€λ κ° μ체μ μ λκ°μ μμλ²λ¦¬λ©΄ μ΄ κ°μ΄ μλ μμμλμ§ μμμλμ§ νμΈν λ°©λ²μ λͺ¨λ₯΄κ² μ΄μ κ·Έλ κ² μ§νμ νμλ€.
std::greater : λ΄λ¦Όμ°¨μ μ λ ¬ ( κΈ°λ³Έν, ν°κ°μ΄ μμ μ€λ λ°©μ 4, 3, 2, 1 ... )
std::less : μ€λ¦μ°¨μ μ λ ¬ ( μμ κ°μ΄ μμμ€λ λ°©μ 1, 2, 3, 4 ... )
νμμΌλ‘ μ 리λ₯Ό νκ³ μ λκ°μ΄ μμ κ°μ λ¨Όμ μΆλ ₯μ ν΄μ€μΌνκΈ°λλ¬Έμ μμμλ μ λκ°μ μμ μμμ λΉκ΅νμ¬ μμ κ°μ μΆλ ₯ν΄μ£Όλ λ°©μμΌλ‘ μ½λλ₯Ό μ§ννμλ€.
code
#include <iostream>
#include <algorithm>
#include <queue>
int main(void)
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int n, temp;
std::priority_queue <int, std::vector<int>, std::greater<int> > plusQue;
std::priority_queue <int, std::vector<int>, std::less<int> > minusQue;
std::cin >> n;
for (int i = 0; i < n; i++)
{
std::cin >> temp;
if (temp == 0)
{
if (plusQue.empty() && minusQue.empty()) {
std::cout << "0" << "\n";
}
else {
if (!plusQue.empty() && minusQue.empty()) {
std::cout << plusQue.top() << "\n";
plusQue.pop();
}
else if (plusQue.empty() && !minusQue.empty()) {
std::cout << minusQue.top() << "\n";
minusQue.pop();
}
else if (plusQue.top() < -minusQue.top()) {
std::cout << plusQue.top() << "\n";
plusQue.pop();
}
else {
std::cout << minusQue.top() << "\n";
minusQue.pop();
}
}
}
else
{
if (temp < 0) minusQue.push(temp);
else plusQue.push(temp);
}
}
return (0);
}
νκΈ°
쑰건μμμ μ κ²½μ°κ³ μκ°ν λΆλΆλ€μ μκ°λ³΄λ€ λ§μμ λλ¦ κ³ μ μ λ§μ΄ νμλ κ±° κ°λ€.