새소식

항해 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에 대하여 복습하고, 관련된 문제들을 풀이해보려 한다.

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

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