새소식

항해 99 TIL

99클럽 코테 스터디 28일차 TIL [Stack]

  • -

문제 url : https://www.acmicpc.net/problem/1874

 

내가 작성한 코드는 아래와 같다.

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] nums = new int[n];

        for(int i=0; i<n; i++) {
            nums[i] = Integer.parseInt(br.readLine());
        }

        solution(nums);
    }

    static void solution(int[] nums) {
        Stack<Integer> st = new Stack<>();
        StringBuilder sb = new StringBuilder();
        int cur = 1;
        boolean canResult = true;

        for(int i=0; i<nums.length; i++) {
            int value = nums[i];

            while(cur <= value) {
                st.push(cur++);
                sb.append("+").append("\n");
            }

            if(st.peek() == value) {
                st.pop();
                sb.append("-").append("\n");
            } else {
                canResult = false;
                break;
            }
        }

        if(canResult) {
            System.out.println(sb.toString());
        } else {
            System.out.println("NO");
        }
    }
}


[풀이 과정]

1. 입력한 수열들을 nums라는 배열에 저장한다.

2. solution() 메소드에서, cur이라는 변수에 1로 초기화한 후, 배열을 순회하며 해당 값을 만들 수 있는지 찾는다. 

3. 해당 배열의 값까지 stack에 push를 하고, 이때 Stack의 top에 해당하는 부분에 찾고자 하는 값이 있는지 확인한다. 만약 없으면, 수열을 만들 수 없음을 의미하므로 break;를 이용하여 for문을 벗어난다. 찾고자 하는 값이 있다면, StringBuilder를 이용해 값을 저장하고, 계속해서 다음 배열 값을 계산한다.

4. canResult라는 boolean값을 통해 해당 수열을 만들 수 있는지 판별한다. true라면, StringBuilder에 저장해놓았던 값을 출력하고, false라면, NO를 출력한다.

  •  

풀이 시간 : 50분

 

내일은 Deque에 대하여 복습하고, 관련된 문제들을 풀이해보려 한다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.