백준 - 스택 수열 (실버 2)
2024. 3. 6. 22:00ㆍ코딩테스트 정리(자바)
728x90
로직
1-1. start=0으로 두고 start<number 라면 start+1부터 number만큼 스택에 담고 + 출력, start=number로 두기
1-2. stack.peek()가 number와 다르다면 NO 출력 후 종료
2. stack.pop()하고 - 출력
3. index가 n이 될 때까지 반복
import java.io.*;
import java.util.*;
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());
int[] num=new int[n];
for(int i=0;i<n;i++){
num[i]=Integer.parseInt(br.readLine());
}
Stack <Integer> stack=new Stack<>();
int start=0;
int index=0;
StringBuilder sb=new StringBuilder();
while(index< n){
int number=num[index++];
if(start<number){
for(int i=start+1;i<=number;i++){
stack.push(i);
sb.append("+").append("\n");
}
start=number;
}
else if(stack.peek()!=number){
bw.write("NO");
bw.flush();
bw.close();
return;
}
stack.pop();
sb.append("-").append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
내가 처음에 구현하려던 로직
-> 마구잡이로 짠것 같다. 지금 보니 굉장히 복잡하다.
import java.io.*;
import java.util.*;
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());
int[] num=new int[n];
for(int i=0;i<n;i++){
num[i]=Integer.parseInt(br.readLine());
}
Stack <Integer> stack=new Stack<>();
int cnt=1;
int index=0;
StringBuilder sb=new StringBuilder();
stack.push(1);
sb.append("+\n");
while(cnt <= n){
if(!stack.isEmpty() && stack.peek()==num[index]){
stack.pop();
sb.append("-\n");
index++;
}
else if(cnt < n){
stack.push(++cnt);
sb.append("+\n");
} else {
break;
}
}
if(!stack.isEmpty())
bw.write("NO");
else
bw.write(sb.toString());
bw.flush();
bw.close();
}
}728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 백준 - 6198번 옥상 정원 꾸미기 (골드 5) (1) | 2024.03.08 |
|---|---|
| 백준 - 2493번 탑 (골드 5) (0) | 2024.03.07 |
| 백준 - 요세푸스 문제 (실버 4) (0) | 2024.03.06 |
| 백준 - 키로거 (실버 2) (1) | 2024.03.05 |
| List<String> list를 String으로 변환 (0) | 2024.03.04 |