더 많이 실패하기

코딩공부 78일차: 백준 1874번 스택 수열 자바 Java 본문

알고리즘/백준

코딩공부 78일차: 백준 1874번 스택 수열 자바 Java

김발자~ 2022. 10. 17. 16:26
반응형

1874 스택 수열

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

 

 


백준 1874번 문제 스택 수열


문제


 

 


오답


 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<Integer> st = new Stack();
        
        int n = Integer.parseInt(br.readLine());
        int arr[] = new int[n];
        int stack[] = new int[n];
        
        for(int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            stack[i] = i+1;
        }
        
        try {
        // try문 안
        int idx = 0;
        st.push(stack[0]);
        for(int i = 0; i < n; i++) {
            while(arr[i] != st.peek()) {
                st.push(stack[idx]);
                idx++;
                System.out.println("+");
            }
            
            if(arr[i] == st.peek()) {
                st.pop();
                System.out.println("-");
            }
            
        } // try문 안
        }
        catch(Exception e) {
            System.out.println("NO");
        }
    
 
 
    }
 
}
cs

 

이번에도 try catch문을 시도해봤지만 제대로 나오지 않았다

NO로 출력한다고 해도 이전 기록 +, -들도 그대로 출력되어서 이걸 어떻게 출력해야 할지 막막했다

 

 

 


정답 인정 코드


 

https://st-lab.tistory.com/m/182

이 블로그를 참고했다

(티스토리가 완전히 복구되지 않아 찾는 데 애먹었다)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Stack<Integer> st = new Stack();
        
        int n = Integer.parseInt(br.readLine());
        int start = 0;
        
        while(n -- > 0) {    //n번 반복
            int value = Integer.parseInt(br.readLine());
            
            if(value > start) {
                for(int i = start+1; i <= value; i++) {    //start+1부터 입력받은 수까지 스택에 push
                    st.push(i);
                    sb.append('+').append('\n');
                }
                start = value;    //오름차순으로 push해야. 어디까지 입력받았는지 알려고 value로 초기화
            }
            
            else if(st.peek() != value) {    //입력받은 값이 스택 끝값과 다르다면
                System.out.println("NO");
                return;    //프로그램 종료
            }
            
            st.pop();
            sb.append('-').append('\n');
        }
        
        System.out.println(sb);
    }
 
}
cs

 

내가 따로 만든 메서드 말고 return을 쓴 건 처음인 것 같다

 

 

 


티스토리가 안 돼서 밀렸던 문제들 끝

반응형
Comments