μ€νκ³Ό νλ₯Ό μ¬μ©ν λ¬Έμ νμ΄
μΌλ°μ μΌλ‘ μ€νκ³Ό ννλ©΄, νμ μ μΆκ³Ό μ μ μ μΆμ κ°λ λ§ μλ©΄ λ μλκ°? λΌλ μκ°μ ν μ μλ€.
νμ§λ§, κ°λ λ§ μμμλ λλ κ²μ΄ μλλΌ μ€μ λ‘ μ΄λ»κ², μ΄λ ν μν©μμ μ¬μ©νλ μ§ μμμΌ ν νμκ° μλ€.
κ·Έ μ΄μ μ μλ°μμ μ¬μ©λλ μ€νκ³Ό ν λ©μλ μ©μ΄λ₯Ό μ λ¦¬ν΄ λμ.
<Stack>
top : μ½μ κ³Ό μμ κ° μΌμ΄λλ μμΉ
push : top μμΉμ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ½μ νλ μ°μ°
pop : topμμΉμ νμ¬ μλ λ°μ΄ν°λ₯Ό μμ νκ³ νμΈνλ μ°μ°
peek : topμμΉμ νμ¬ μλ λ°μ΄ν°λ₯Ό λ¨μ νμΈνλ μ°μ°
<Queue>
rear : νμμ κ°μ₯ λ λ°μ΄ν°λ₯Ό λλλ
front : νμμ κ°μ₯ μμ λ°μ΄ν°λ₯Ό κ°λ¦¬ν΄
add : rear λΆλΆμ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ½μ
poll : frontλΆλΆμ μλ λ°μ΄ν°λ₯Ό μμ νκ³ νμΈνλ μ°μ°
peek : νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό νμΈν λ μ¬μ©
μ€νμ μ¬μ©νλ κ²½μ°
λ¬Όλ‘ κ°μΈμ μΈ μκ°μ΄λ λͺ κ°μ§ μ νμΌλ‘ λλλ λ― νλ€.
1. λ¬Έμ μ체μμ μ€νμ μ¬μ©νλλ‘ μ λνλ κ²½μ°
2. μ€νμ μ¬μ©νμ¬ λ¬Έμ λ₯Ό κ°λ¨νκ² ν΄κ²°ν μ μλ κ²½μ°
3. μ€νμ μ¬μ©ν λ, μκ°λ³΅μ‘λκ° μ€μ΄λλ κ²½μ°
μμ λ¬Έμ λ μλ λ°±μ€ 1874λ²κ³Ό κ°λ€.
1874λ²: μ€ν μμ΄
1λΆν° nκΉμ§μ μμ λν΄ μ°¨λ‘λ‘ [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] μ°μ°μ μννλ©΄ μμ΄ [4, 3, 6, 8, 7, 5, 2, 1]μ μ»μ μ μλ€.
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] A = new int[N];
for (int i=0; i<N; i++) {
A[i] = sc.nextInt();
}
Stack<Integer> stack = new Stack<>();
StringBuffer bf = new StringBuffer();
int num = 1;
boolean result = true;
for(int i=0 ; i< A.length; i++) {
int su = A[i];
if (su >= num) {
while(su >= num) {
stack.push(num++);
bf.append("+\n");
}
stack.pop();
bf.append("-\n");
}
else {
int n = stack.pop();
if (n > su) {
System.out.println("NO");
result = false;
break;
}
else {
bf.append("-\n");
}
}
}
if (result) System.out.println(bf.toString());
}
}
μ΄ λ¬Έμ λ μꡬ μμ²΄κ° μ€νμ μ¬μ©νμ¬ ν΄λΉ μμ΄μ λ§λ€ μ μλ μ§λ₯Ό 묻λλ€.
μ¦, νμ μ μΆμ΄λΌλ κ°λ νμ 쑰건μ λΆν©ν μ pushνκ³ popνλ λ¬Έμ λΌλ κ²μ΄λ€.
λ€μμ λ°±μ€ 17298λ¬Έμ μ΄λ€.
17298λ²: μ€ν°μ
첫째 μ€μ μμ΄ Aμ ν¬κΈ° N (1 ≤ N ≤ 1,000,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μ μμ΄ Aμ μμ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)μ΄ μ£Όμ΄μ§λ€.
www.acmicpc.net
ν΄λΉ λ¬Έμ λ μ ν μκ°μ΄ 1μ΄μ΄κ³ , Nμ μ΅λ ν¬κΈ°κ° 1,000,000μ΄λ―λ‘, λ°λ³΅λ¬Έμ μ¬μ©νλ©΄ μκ°μ΄κ³Όκ° κ±Έλ¦°λ€.
μ¦, μκ° λ³΅μ‘λλ₯Ό μ€μ΄κΈ° μν΄ μ€νμ μ¬μ©ν μ μλ€.
νμ μ μΆμ΄λΌλ μ±μ§μ ν΅ν΄ μκ°λ³΅μ‘λλ₯Ό μΆμ΄κ±°λ, νΉμ λ¬Έμ 쑰건μ λν ν΄κ²°μ μκ°ν΄λ³΄μ
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int A[] = new int[N];
int ans[] = new int[N];
String[] str = bf.readLine().split(" ");
for(int i=0; i<str.length; i++) {
A[i] = Integer.parseInt(str[i]);
}
Stack<Integer> myStack = new Stack<>();
myStack.push(0);
// for(Nλ§νΌ λ°λ³΅)
// while(μ€νμ΄ λΉμ΄μμ§ μκ³ , νμ¬ μμ΄μ κ°μ΄ topμ ν΄λΉνλ μμ΄μ κ°λ³΄λ€ ν΄ λκΉμ§)
// { pop(), μ λ΅ λ°°μ΄μ μ€ν° μλ₯Ό νμ¬ μμ΄λ‘ μ μ₯ }
// νμ¬ μμ΄μ μ€ν° μμ push
for(int i=0; i<N; i++) {
while(!myStack.isEmpty() && A[myStack.peek()] < A[i]) {
ans[myStack.pop()] = A[i];
}
myStack.push(i);
}
// while(μ€νμ΄ λΉ λκΉμ§)
// μ€νμ μλ μΈλ±μ€μ μ λ΅ λ°°μ΄μ -1 μ μ₯
// μ λ΅ λ°°μ΄ μΆλ ₯
while(!myStack.isEmpty()) {
ans[myStack.pop()] = -1;
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0; i<N; i++) {
bw.write(ans[i] + " ");
}
bw.write("\n");
bw.flush();
}
}
ν΄λΉ λ¬Έμ μ ν΅μ¬μ μ€νμ μΈλ±μ€μ²λΌ μ¬μ©νμ¬, λΆνμν λ°λ³΅λ¬Έμ μ€μΈλ€λ κ²μ΄λ€.

νλ₯Ό μ¬μ©νλ κ²½μ°
νλ μ μ μ μΆμ΄λΌλ μ±μ§μ κ°μ§λ©°, μ€νκ³Ό λ§μ°¬κ°μ§λ‘ μ΄λ₯Ό μ λνλ λ¬Έμ λ νλ₯Ό μ¬μ©νμμ λ μκ°λ³΅μ‘λ λ° νμ΄ λ°©μμ΄ κ°νΈν λλ κ²½μ°κ° μλ€.
λ°±μ€ 2164λ² λ¬Έμ λ₯Ό μ΄ν΄λ³΄μ.
2164λ²: μΉ΄λ2
Nμ₯μ μΉ΄λκ° μλ€. κ°κ°μ μΉ΄λλ μ°¨λ‘λ‘ 1λΆν° NκΉμ§μ λ²νΈκ° λΆμ΄ μμΌλ©°, 1λ² μΉ΄λκ° μ μΌ μμ, Nλ² μΉ΄λκ° μ μΌ μλμΈ μνλ‘ μμλλ‘ μΉ΄λκ° λμ¬ μλ€. μ΄μ λ€μκ³Ό κ°μ λμμ μΉ΄λκ°
www.acmicpc.net
μ΄ λ¬Έμ λ Queueλ₯Ό μ¬μ©νλ©΄ μ λ§ μ½λ€.
맨 μμ μλ ν νλͺ©μ λΉΌκ³ , κ·Έ λ€μ 맨μμ ν νλͺ©μ 맨 μλμ μΆκ°νλ©΄ λλλ€.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// N(μΉ΄λ κ°μ), myQueue(μΉ΄λ μ μ₯ μλ£κ΅¬μ‘°)
// for(μΉ΄λ κ°μλ§νΌ λ°λ³΅)
// { νμ μΉ΄λ μ μ₯ }
// while(μΉ΄λκ° 1μ₯ λ¨μ λ κΉμ§)
// { 맨 μμ μΉ΄λ λ²λ¦¬κΈ°, 맨 μμΉ΄λλ₯Ό κ°μ₯ μλ μΉ΄λλ‘ μ΄λ }
Scanner sc = new Scanner(System.in);
Queue<Integer> myQueue = new LinkedList<>();
int N = sc.nextInt();
for(int i=1; i<=N; i++) {
myQueue.add(i);
}
while(myQueue.size() > 1) {
myQueue.poll();
myQueue.add(myQueue.poll());
}
System.out.println(myQueue.poll());
}
}
μ°μ μμ ν
μ°μ μμ νλ ν μλ£κ΅¬μ‘°μμ μ°μ μμκ° μ§μ λ νλ₯Ό μλ―Ένλ€. μ΄λ κ°μ΄ μ μ₯λ λ, μ λ ¬ μμλ₯Ό μ§μ ν΄ μ€ μ μλ€.
μλ°μμ μ°μ μμ νλ₯Ό μ¬μ©νμ¬ μ λ ¬ μμλ₯Ό μ§μ ν΄μ£Όλ λ°©λ²μ κ°λ¨νλ€.
Comparatorλ₯Ό μ¬μ©νμ¬ μ λ ¬ μμλ₯Ό μ ν΄μ£Όμλ κ²μ²λΌ, PriorityQueueκ°μ²΄λ₯Ό μ μΈ ν λ μμλ₯Ό μ ν΄μ£Όλ©΄ λλ€.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// N(μ§μ μμ² κ°μ)
// μ°μ μμ ν μ μΈ
// μ λκ° κΈ°μ€μΌλ‘ μ λ ¬. λ¨ μ λκ°μ΄ κ°λ€λ©΄, μμ μ°μ
// for(Nλ§νΌ λ°λ³΅)
// { μμ²μ΄ 0μ΄λΌλ©΄, νκ° λΉμ΄μμΌλ©΄ 0 λΉμ΄μμ§ μλ€λ©΄, νμ frontκ° μΆλ ₯
// μμ²μ΄ 1μ΄λΌλ©΄, μλ‘μ΄ λ°μ΄ν°λ₯Ό νμ λνκΈ° }
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
PriorityQueue<Integer> MyQueue = new PriorityQueue<>((o1, o2) -> {
int first_abs = Math.abs(o1);
int second_abs = Math.abs(o2);
if (first_abs == second_abs) {
return o1 > o2? 1: -1;
} else {
return first_abs - second_abs;
}
});
for(int i=0; i<N; i++) {
int request = Integer.parseInt(bf.readLine());
if (request == 0) {
if (MyQueue.isEmpty()) {
System.out.println(0);
} else {
System.out.println(MyQueue.poll());
}
} else {
MyQueue.add(request);
}
}
}
}
Reference
- Do it! μ½λ© ν μ€νΈ - κΈ°μ΄ νΈ
'π Knowledge > μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [μκ³ λ¦¬μ¦] μ λ ¬(λ³ν©, κΈ°μ) μκ³ λ¦¬μ¦ (3) (0) | 2023.08.18 |
|---|---|
| [μκ³ λ¦¬μ¦] μ λ ¬(ν΅ μνΈ) μκ³ λ¦¬μ¦ (2) (0) | 2023.08.14 |
| [μκ³ λ¦¬μ¦] μ λ ¬(λ²λΈ, μ ν, μ½μ ) μκ³ λ¦¬μ¦ (1) (0) | 2023.08.13 |
| [μκ³ λ¦¬μ¦] μ¬λΌμ΄λ© μλμ° μκ³ λ¦¬μ¦ (0) | 2023.08.11 |
| [μκ³ λ¦¬μ¦] ν¬ ν¬μΈν° μ¬μ©νκΈ° (0) | 2023.08.10 |