Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2021.01.18
- SWEA
- 박재성
- 2021.01.19
- 잃어버린 괄호
- 2021.01.12
- 2021.01.14
- java
- 백준 9093
- 쉽게 배우는 운영체제
- 2021.01.22
- 알고리즘데이
- 코드스쿼드
- 자바
- 알고리즘
- 백준
- Til
- 2021.01.11
- 2021.01.21
- spring-boot
- 백준 1149
- 괄호
- 코드스쿼드 마스터즈
- 2021.01.13
- baekjoon1541
- 마스터즈 2주차 회고
- 2021.01.17
- algorithm
- 2020.01.08
- 2021.01.06
Archives
- Today
- Total
Cooper's devlog
스택수열 : 1874번 - JAVA 본문
1. 문제 링크
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
2. 문제 설명
3. 문제 접근법
예제 입력1
(1) 4 입력 시
- 1 ~ 4까지 stack에 추가
- stack에 추가하는 동시에, '+'가 result에 추가됨
- 4 발견 시, stack에서 4 제거
- '-'가 result에 추가
stack(Stack)
1 | 2 | 3 | (4) |
result(ArrayList)
+ | + | + | + | - |
(2) 3 입력 시
- 3이 나올 때까지 출력
- '-'가 result에 추가
stack(Stack)
1 | 2 | (3) |
result(ArrayList)
+ | + | + | + | - | - |
(3) 6 입력 시
- ~6까지 stack에 추가
- stack에 추가하는 동시에, '+'가 result에 추가
- 6 발견 시, stack에서 6 제거
- '-'가 result에 추가
stack에 추가하는 동시에,
stack(Stack)
1 | 2 | 5 | (6) |
result(ArrayList)
+ | + | + | + | - | - | + | + | - |
위와 같은 원리로 반복....
4. 문제 풀이
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
|
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = 1;
Stack<Integer> stack = new Stack<Integer>();
ArrayList<Character> result = new ArrayList<Character>();
int test_case = Integer.parseInt(sc.nextLine());
for (int i = 0; i < test_case; i++) {
int data = sc.nextInt();
while (cnt <= data) {
stack.push(cnt);
cnt += 1;
result.add('+');
}
if (stack.peek() == data) {
stack.pop();
result.add('-');
}
else {
System.out.println("NO");
return;
}
}
for (int i = 0; i < result.size(); i++) {
System.out.println(result.get(i));
}
}
}
|
5. 개선점 또는 트러블 슈팅
- 이전 코드에서 런타임 에러가 계속 떴는데, for문의 로직에 해당하는 부분을 다시 적었더니 된다;;
(이전 코드를 다시 한번 확인해봐야겠다)
'Algorithm > Baekjoon' 카테고리의 다른 글
조세퍼스 문제 : 1158번 - JAVA (0) | 2020.07.08 |
---|---|
에디터:1406번 - JAVA (0) | 2020.07.08 |
괄호 : 9012번 - JAVA (0) | 2020.07.07 |
단어 뒤집기 : 9093번 - JAVA (0) | 2020.07.06 |
스택 : 10828번 - JAVA (0) | 2020.07.06 |
Comments