π°ππππππππ/π±πππππππ
[λ°±μ€/Java] λν€λν€ κ°μλ리미 12789
ν΄λ²λ
2023. 11. 28. 10:11
λ°μν
λ¬Έμ
https://www.acmicpc.net/problem/12789
12789λ²: λν€λν€ κ°μλ리미
μΈνλνκ΅ νμνμμλ μ€κ°, κΈ°λ§κ³ μ¬ λλ§λ€ μν 곡λΆμ μ§μΉ νμ°λ€μ μν΄ κ°μμ λλ μ£Όλ κ°μ λ리미 νμ¬λ₯Ό μ€μνλ€. μΉνμ΄λ μν κΈ°κ°μ΄ λ λλ§λ€ κ°μμ λ°μ μκ°μ λκ·Όλ
www.acmicpc.net
κ·μ¬μ΄ κ°μ λ¬Έμ
κ³Όμ° μΉνμ΄λ κ°μμ λ¨Ήμ μ μμκΉ...?
νμ΄
1. stack 2κ°λ‘ νκΈ°
μ€ν 2κ°λ‘ νμλλ° ν νλ μ€ν νλλ‘λ νμ΄λ λ κ² κ°λ€.
κ±°κΎΈλ‘ μ€νμ λ£μλλ°, μκ³ λ³΄λ νλ₯Ό μ¬μ©νλ©΄ λλ°λ‘ μ½μ νκ³ μΆμΆν μ μμλ€.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static int peekStack(Stack<Integer> stack) {
if (stack.isEmpty()) {
return -1;
} else {
return stack.peek();
}
}
public static void popStack(Stack<Integer> stack) {
if (!stack.isEmpty()) {
stack.pop();
}
}
public static void pushStack(int x, Stack<Integer> stack) {
stack.push(x);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int start = 1;
int[] arr = new int[num];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
for (int i = arr.length - 1; i >= 0; i--) {
stack1.add(arr[i]);
}
while (!stack1.isEmpty()) {
if (peekStack(stack1) == start) {
popStack(stack1);
start++;
} else if (peekStack(stack2) == start) {
popStack(stack2);
start++;
} else {
int peekNum = peekStack(stack1);
popStack(stack1);
if (peekNum != -1) {
pushStack(peekNum, stack2);
}
}
}
int length = stack2.size();
for (int i = 0; i < length; i++) {
if (stack2.peek() == start) {
popStack(stack2);
start++;
}
}
if (stack1.isEmpty() && stack2.isEmpty()) {
bw.write("Nice");
} else {
bw.write("Sad");
}
bw.flush();
bw.close();
}
}
2. queueλ stackμΌλ‘ νκΈ°
package algorithm;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
public class Algorithm {
public static int peekStack(Stack<Integer> stack) {
if (stack.isEmpty()) {
return -1;
} else {
return stack.peek();
}
}
public static void popStack(Stack<Integer> stack) {
if (!stack.isEmpty()) {
stack.pop();
}
}
public static void pushStack(int x, Stack<Integer> stack) {
stack.push(x);
}
public static int peekQueue(Queue<Integer> queue) {
if(queue.isEmpty()) {
return -1;
} else {
return queue.peek();
}
}
public static void popQueue(Queue<Integer> queue) {
if(!queue.isEmpty()) {
queue.poll();
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int start = 1;
int[] arr = new int[num];
Queue<Integer> queue = new LinkedList<>();
Stack<Integer> stack2 = new Stack<>();
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
queue.add(Integer.parseInt(st.nextToken()));
}
while (!queue.isEmpty()) {
if (peekQueue(queue) == start) {
popQueue(queue);
start++;
} else if (peekStack(stack2) == start) {
popStack(stack2);
start++;
} else {
int peekNum = peekQueue(queue);
popQueue(queue);
if (peekNum != -1) {
pushStack(peekNum, stack2);
}
}
}
int length = stack2.size();
for (int i = 0; i < length; i++) {
if (stack2.peek() == start) {
popStack(stack2);
start++;
}
}
if (queue.isEmpty() && stack2.isEmpty()) {
bw.write("Nice");
} else {
bw.write("Sad");
}
bw.flush();
bw.close();
}
}
μ λ΅
1. queueλ stackμ΄λ νκΈ°
2. stack 2κ°λ‘ νκΈ°
λ°μν