μ΄μ μνλ₯Ό κΈ°μ΅ν΄μΌ νλ ꡬ쑰(λ°±νΈλνΉ)μλ μ€νμ νμ©νμΈμ.
λ€μ΄κ°λ©°
μ€νκ³Ό νμ λν μ€λͺ μ κ΅³μ΄ νμ§ μκ² μ΅λλ€. λ€λ§ μ΄λ€ μκ³ λ¦¬μ¦μ μ€νκ³Ό νλ₯Ό μ¬μ©ν΄μΌ νλμ§ μ§μ€ν©μλ€. μ€νμ κΈ°λ³Έμ μΌλ‘ νμ μ μΆ κ΅¬μ‘°μ΄κΈ° λλ¬Έμ DFS(κΉμ΄ μ°μ νμ), μ¬κ· λ±μ μ¬μ©ν©λλ€. λͺ¨λ κ²μ κ΄ν΅νλ κ°λ μ μ΄μ μν 볡ꡬλΌκ³ μκ°ν©λλ€. μ€ν μμ²΄κ° λ°μ΄ν°λ₯Ό μμ μ¬λ¦¬λ€κ° λΊ λλ κ°μ₯ μ΅μ μ μμΈ λ°μ΄ν°λ§ λΉΌκΈ° λλ¬Έμ λ°λ‘ μ΄μ μνλ₯Ό λμ°Ύμ μ μμ΅λλ€. μ΄λ° νΉμ± λλΆμ μ¬κ·, DFS, κ΄νΈ κ²μ¬, Undo λ± μ΄λ€ λ°©ν₯μΌλ‘ κ°λ€κ° λ€μ λλμ μ¬ μ μλ νκΈ° λ₯λ ₯μ΄ μμ΅λλ€. λ°λΌμ, μ€νμ μ΄μ μνλ₯Ό κΈ°μ΅ν΄ λκ°λ©΄μ νμν λ λΉ λ₯΄κ² popνμ¬ λΉκ΅νλλ° μ΅μ νλ μλ£κ΅¬μ‘°μ λλ€.
νμ κ²½μ°μλ μ°μ μμ νκ° μλ μ¬ν νλ μ€νλ³΄λ€ λΉλκ° λμ§ μμ΅λλ€. μ μ μ μΆμ νΉμ±μ λκΈ°μ΄, BFS(λλΉ μ°μ νμ), μ€μΌμ€λ§μ μ¬μ©λ©λλ€. μ°μ μμ νλ μ΄μ ν¬μ€ν μ μ°Έκ³ ν΄μ£ΌμΈμ!
λ¬Έμ
λ°λ³΅λ¬ΈμΌλ‘ μ κ·Όνλ©΄ Nμ κ³±μ μκ°λ³΅μ‘λκ° λμ€κΈ° λλ¬Έμ μ ν μκ° μ΄κ³Όμ λλ€. μΈλ±μ€λ₯Ό λλ €λκ°λ©΄μ μ€ν°μλ₯Ό μ μ₯νλ λ°©μλ νκ³κ° μλ€λ κ²μ κΉ¨λ«κ³ λ€μ μμ μμ μκ°ν΄λ΄€μ΅λλ€. μ΄μ μνλ₯Ό κΈ°μ΅ν΄ λκ°λ©΄μ μλ‘μ΄ μ«μμ λΉκ΅νλ μ νμ μΈ μ€ννμ© λ¬Έμ λΌλ κ²μ λ μ¬λ Έμ΅λλ€.
νμ΄(μ€ν)
μ€νμ μλ‘ λ€μ΄μ€λ μκ° topμ μ‘΄μ¬νλ μλ³΄λ€ ν¬λ©΄ κ·Έ μλ μ€ν°μκ° λ©λλ€.
μ€νμλ κ°μ΄ μλ indexλ₯Ό κΈ°μ€μΌλ‘ μ€ν°μλ₯Ό resultμ λ΄μ΅λλ€.
#pragma once
// λ°±μ€ 17298: μ€ν°μ
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
vector<int> list(N, 0);
for (int i = 0; i < N; i++)
cin >> list[i];
vector<int> result(N, 0);
stack<int> s;
int idx = 0;
while (idx < N)
{
const int& target = list[idx];
if (s.empty())
{
s.push(idx++);
continue;
}
const auto top = s.top();
if (list[top] < target)
{
result[top] = target;
s.pop();
}
else
{
s.push(idx++);
}
}
while (!s.empty())
{
const auto top = s.top();
result[top] = -1;
s.pop();
}
for (const auto& r : result)
printf("%d ", r);
}
λ¬Έμ
νμ΄(ν)
νλ₯Ό νμ©ν΄μΌκ² λ€λ μκ°λ§ λ μ¬λ¦°λ€λ©΄ λλ¨Έμ§λ μ ν λ¬Έμ λμ§ μμ΅λλ€.
#pragma once
// λ°±μ€ 2164: μΉ΄λκ²μ
#include <iostream>
#include <queue>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
queue<int> q;
for (int i = 1; i <= N; i++)
q.push(i);
while (q.size() > 1)
{
q.pop();
const auto front = q.front();
q.pop();
q.push(front);
}
printf("%d", q.front());
}
(μ°Έκ³ λ‘ const auto frontμ const auto &λ₯Ό λΆμλλ λ°νμμλ¬κ° λμμμ΅λλ€. μ»΄νμΌλ¬μ μ°¨μ΄μΌ μ μμ΅λλ€. λΆνμν 볡μ¬λ₯Ό λ§κΈ° μν΄ νμ μ°Έμ‘°λ₯Ό ν΅ν΄ κ°μ Έμ€λ μ΅κ΄μ΄... 볡μ¬κ° νμν λ κ·Έλ₯ ν©μλ€..!)
DFSμ BFSλ μΆνμ λ¬Έμ λ₯Ό λ λ§μ΄ νμ΄λ³΄κ³ ν¬μ€ν νκ² μ΅λλ€~
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ°μ μμ ν] μ΅μκ° or μ΅λκ° μ°ΎκΈ° μκ³ λ¦¬μ¦(feat. deque) (0) | 2025.04.13 |
---|---|
[κΈ°λ³Έ] ν¬ ν¬μΈν° (0) | 2025.03.25 |
[κΈ°λ³Έ] ꡬκ°ν© μμ© (0) | 2025.03.13 |
[κΈ°λ³Έ] μ€ν μλ£κ΅¬μ‘° νμ© (0) | 2025.03.10 |
[κΈ°λ³Έ] ν©λ°°μ΄κ³Ό κ΅¬κ° ν© κ΅¬νκΈ° (0) | 2025.03.08 |
λκΈ