문제

로직
수열의 길이 입력 받기 N
수열을 담을 배열 선언 & 크기 설정
1. 반복문
- 배열에 수열 입력 받기
스택 선언
결과 판별할 부울 변수 선언 및 초기화
오름차순 자연수 변수 선언 및 초기화
StringBuffer 선언(출력할 값)
2. 반복문
- 수열의 값이 오름차순 자연수 값보다 크거나 같을 때
같을 때까지 반복
-> 스택에 push, + 값 저장
클 때
-> 스택 pop(), - 값 저장
- 수열의 값이 오름차순 자연수 값보다 작을 때
스택 pop()
pop한 값이 배열의 값보다 클 때
-> 불가능 -> NO출력, 결과값 false, 프로그램 종료
pop한 값이 배열의 값보다 작을 때
-> - 값 저장
My Code
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] numArray = new int[N];
for (int b = 0; b < N; b++){
numArray[b] = sc.nextInt();
}
Stack<Integer> stack = new Stack<>();
boolean result = true;
int num = 1;
StringBuffer bf = new StringBuffer();
for (int i = 0; i < numArray.length; i++)
{
int su = numArray[i];
if (su >= num)
{
while (su >= num) {
stack.push(num++);
bf.append("+\n");
}
stack.pop();
bf.append("-\n");}
else {
int n = stack.pop();
if (n > su){ System.out.println("NO"); result = false; break;}
else bf.append("-\n");
}
}
if (result) System.out.println(bf.toString());
}
}
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] numArray = new int[N];
for (int b = 0; b < N; b++){
numArray[b] = sc.nextInt();
}
Stack<Integer> stack = new Stack<>();
boolean result = true;
int num = 1;
StringBuffer bf = new StringBuffer();
for (int i = 0; i < numArray.length; i++)
{
int su = numArray[i];
if (su >= num)
{
while (su >= num) {
stack.push(num++);
bf.append("+\n");
}
stack.pop();
bf.append("-\n");}
else {
int n = stack.pop();
if (n > su){ System.out.println("NO"); result = false; break;}
else bf.append("-\n");
}
}
if (result) System.out.println(bf.toString());
}
}
문제의 핵심 & 알게된 점
스택을 이용하는 문제이다보니 스택에 대한 기본 지식이 중요했다.
+, -값을 String문자열로 저장하려고 하니 append를 어떻게 할지 고민이었는데
StringBuffer을 이용해서 메서드를 부르니 편리하게 이용할 수 있었다.
참고 강의_인프런의 Do it! 알고리즘 코딩테스트 with JAVA
'Java' 카테고리의 다른 글
[백준] 11286번 절댓값 힙 - 우선순위 큐 / 오름차순 정렬 / 반환 값 변화 / 절댓값 (0) | 2023.08.19 |
---|---|
[백준] 2164번 카드2 - 큐(Queue)/선입선출/스택을 이용한 방법/ (0) | 2023.08.18 |
[백준] 12891번 DNA 비밀번호 - 슬라이딩 윈도우 / switch / 함수 (0) | 2023.08.12 |
[백준] 1940번 주몽 - 투포인터 / 시간 제한 맞추기 / 배열 정렬 / BufferReader (0) | 2023.08.12 |
[백준] 2018번 수들의 합5 - 투포인터 / 배열 / if문 / while문 (0) | 2023.08.11 |