package src.baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder result = new StringBuilder(); // 결과문자열
int length = Integer.parseInt(br.readLine()); // 수열 라인 수
Stack<Integer> stackA = new Stack<Integer>(); //스택
int cnt = 1;
for (int i = 0; i < length; i++) {
StringTokenizer str = new StringTokenizer(br.readLine());
while (str.hasMoreTokens()) {
String numToken = str.nextToken();
int inputNum = Integer.parseInt(numToken);
if(cnt < inputNum || stackA.isEmpty()) {
for (int k = cnt; k <= inputNum; k++) { //<= 실수
stackA.push(k);
result.append("+\n"); //스택에 추가할 때는 +를 result에 append
cnt++;
}
}
if(stackA.peek() == inputNum) {
stackA.pop();
result.append("-\n");
}
}
}
if(!stackA.isEmpty()) {
result.setLength(0);
result.append("NO\n");
}
System.out.println(result); //최종 결과
}
}
결과 : 예시 결과는 제대로 출력했지만 오답
중간에 NO인 경우를 테스트했을 때 계산이 1번 모자라서 cnt를 1로 시작했는데, for문에서 cnt + 1이 들어가야 했다.
계산해가면서 cnt랑 inputNum이 같으면 stack에서 pop하고 아닐 경우 continue해서 마지막에 stack이 비지 않았을 때 NO를 출력한다.
계산해가면서 cnt랑 inputNum이 같지 않으면 바로 NO를 println()하고 리턴한다. (계산 및 비교를 종료한다.)
아래는 정답
package src.baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder result = new StringBuilder(); // 결과문자열
Stack<Integer> stackA = new Stack<Integer>(); //스택
int length = Integer.parseInt(br.readLine()); // 수열 라인 수
int cnt = 0;
while (length-- > 0) {
int inputNum = Integer.parseInt(br.readLine());
if (inputNum > cnt) {
for (int k = cnt + 1; k <= inputNum; k++) { //ERROR
stackA.push(k);
result.append("+\n");
}
cnt = inputNum; // CNT++이 아니라 inputNum을 그대로 넣어버리는 것이다.
}
if (stackA.peek() != inputNum) { //그냥 바로 빠져나가네
System.out.println("NO");
return;
}
}
System.out.println(result);
}
}
4일