코딩테스트 연습 스터디 진행중 입니다. ✍✍✍
Notion : https://www.notion.so/1c911ca6572e4513bd8ed091aa508d67
문제
https://www.acmicpc.net/problem/1874
[나의 풀이]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;
public class Main {
static Stack<Integer> makeStack(BufferedReader br) throws NumberFormatException, IOException {
Stack<Integer> stack1 = new Stack<>();
int N = Integer.parseInt(br.readLine());
for (int i = N; i > 0; i--) {
stack1.push(i);
}
return stack1;
}
static void getAns(Stack<Integer> stack1, BufferedReader br) throws NumberFormatException, IOException {
StringBuilder sb = new StringBuilder();
Stack<Integer> stack2 = new Stack<>();
stack2.push(0);
ArrayList list1 = new ArrayList<>();
int n = stack1.size();
int m;
for (int i = 0; i < n; i++) {
m = Integer.parseInt(br.readLine());
list1.add(m);
}
int o = -1;
for (int i = 0; i < n; i++) {
o = (int) list1.get(i);
while (!stack2.peek().equals(o)) {
if (stack2.peek() > o) {
System.out.println("NO");
return;
}
stack2.push(stack1.pop());
sb.append("+" + "\n");
}
stack2.pop();
sb.append("-" + "\n");
}
System.out.println(sb.toString());
return;
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack1 = makeStack(br);
getAns(stack1, br);
}
}
다른 풀이들과 약간 다르게 풀어보았습니다. 입력값들이 저장된 Stack을 하나 만든 뒤 다른 Stack으로 하나씩 push 하며 pop하는 방식입니다.
풀이 과정중 계속 런타임에러(Numberforamt)에러가 떠서 고생하였는데
그 이유는 BufferedReader/Writer를 두 개 이상 생성한 것이 이유였습니다. 🐷🐷🐷
또 출력초과 에러가 뜨기도 하였습니다. 이 경우는 BufferedWrite에 여러 번 write 했을 때 버퍼의 크기를 초과하면 자동으로 호출된 것이 이유였습니다. 그리하여 출력 시에는 StringBuilder를 활용하는 방식으로 해결하였습니다.
감사합니다.🐻🐻🐻