728x90
문제
https://www.acmicpc.net/problem/1874
해결 방법
처음에 정말 어렵게 접근했다가 도저히 안풀려서 구글링을 하고 좌절했다....(이렇게 쉬운 문제였을 수가...)
스택과, 배열을 잘 이용하면 쉽게 풀 수 있는 문제이다.
입력받은 숫자들의 수열은 배열에 넣고
for문을 통해 1~n까지 반복한다.
이때 stack에는 1부터 순서대로 넣고
인덱스 값과 리스트의 값과 stack의 peek의 값을 비교한다.
여기서 인덱스 값은 0부터 pop을 할 때 하나씩 증가시킨다.
비교할 때 같으면 pop, 다르면 break를 해주면 된다.
마지막으로 결국 스택이 비어있다면 출력리스트의 넣은 값들을 차례대로 출력해주고 스택이 안 비어있다면 "NO"를 출력하면 된다.
코드
package stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Baek1874 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Stack<Integer> stack = new Stack<>();
List<String> printList = new ArrayList<>();
int num = scan.nextInt();
int[] list = new int[num];
for(int i = 0;i<num;i++){
list[i] = scan.nextInt();
}
int index = 0;
for(int i = 1; i<=num;i++){
stack.push(i);
printList.add("+");
while (!stack.isEmpty()){
if(stack.peek() == list[index]){
stack.pop();
printList.add("-");
index++;
}else{
break;
}
}
}
if(stack.isEmpty()){
for(String s : printList){
System.out.println(s);
}
}else{
System.out.println("NO");
}
}
}
728x90
'코딩테스트' 카테고리의 다른 글
[백준 1010] 다리 놓기 (2) | 2023.12.05 |
---|---|
[백준 17928] 오큰수[java] (0) | 2021.11.05 |
[백준 14888] 연산자 끼워넣기 [java] (0) | 2021.05.12 |
[백준 15652] N과 M (4) [java] (0) | 2021.05.12 |
[백준 11725] 트리의 부모 찾기 [java] (0) | 2021.05.06 |
댓글