728x90
반응형
1. 문제
https://www.acmicpc.net/problem/1874
2. 접근 및 해결
2-1) 접근
Stack<Integer> stk = new Stack<Integer>();
int num = 1; // (앞으로) 스택에 추가할 값 (1 <= num <= n)
StringBuilder sb = new StringBuilder(); // 출력 가능할 경우 출력할 문자열
boolean isNoTrue = false; // 출력 불가능할 경우 처리를 위한 flag값
2-2) 해결
워낙 블로그가 많이 있길래(해결방법도 비슷) 해결에 있어서 계속 틀린 부분만 다뤄보고자합니다!
우선 for과 while문을 섞어서 쓰는 블로그가 많이 있는데, 저는 for문을 2번 사용했습니다.
1. if문으로 조건을 걸 때 주의해야 할 점
안쪽의 반복문(for문)을 감쌀 때 num(앞으로 스택에 추가할 값) < a(현재 input으로 들어 값)라는 조건을 주면 안됩니다.
만약 num이 1이고 a가 1이면 이 for문이 실행되지 않습니다.
입력값으로 아래의 1 1을 넣어보면 "NO"가 출력됩니다.
// if문이 있는 경우 입력
1
1
// if(num<a) {
for(int j=num; j<a+1; j++) {
stk.push(j);
num++;
sb.append("+").append("\n");
}
// }
2. StringBuilder에 \n 사용 시 주의할 점
-이거때문에 계속 "틀렸습니다"를 만났습니다..ㅠ
// 실패
sb.append("+\n");
// 맞음
sb.append("+").append("\n");
3. 코드(JAVA)
import java.io.*;
import java.util.*;
public class Main {
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 N = Integer.parseInt(br.readLine());
Stack<Integer> stk = new Stack<Integer>();
int num = 1;
StringBuilder sb = new StringBuilder();
boolean isNoTrue = false;
for(int i=0; i<N; i++) {
int a = Integer.parseInt(br.readLine());
for(int j=num; j<a+1; j++) {
stk.push(j);
num++;
sb.append("+").append("\n");
}
if(!stk.isEmpty() && stk.peek()==a) {
stk.pop();
sb.append("-").append("\n");
} else {
isNoTrue = true;
break; // 없어도 됨
}
}
if(isNoTrue) {
bw.write("NO");
} else {
bw.write(sb.toString());
}
br.close();
bw.close();
}
}
728x90
반응형
'Study > Algorithm' 카테고리의 다른 글
[BOJ] 백준 6198번: 옥상 정원 꾸미기_자바(JAVA) (1) | 2024.02.04 |
---|---|
[BOJ] 백준 2493번: 탑_자바(JAVA) (0) | 2024.02.04 |
[BOJ] 백준 3273번: 두수의 합_자바(JAVA) *정렬, 투포인터 이용하지 않고 풀기 (0) | 2024.02.02 |
[BOJ] 백준 1267번: 핸드폰 요금_자바(JAVA) (0) | 2024.02.01 |
[BOJ] 백준 2480번: 주사위 세개_자바(JAVA) (1) | 2024.01.30 |