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
- 프로그래밍언어
- HTML
- Linux
- 인강
- 프로그래밍
- BOJ
- 공부
- 연결요소의개수
- CSS
- 프로그래머스
- 부스트코스
- 정수내림차순으로배치하기
- 수박수박수박수박수?
- 필기후기
- 중소기업면접
- 웹개발
- 이클립스
- 필기
- 농은면접
- 웹
- 코딩
- algorithm
- 웹프로그래밍
- 알고리즘
- 건보필기
- java
- 후기
- 확인문제
- 백준
- 한국재정정보원
Archives
- Today
- Total
공부하는 히욤이
[BOJ] 1874. 스택 수열 본문
BaekJoon 1874. 스택 수열
* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.
[문제 접근]
input 값을 받는 nn이라는 변수와 현재 값을 저장하는 num이라는 변수를 정해서
현재 값 이 input 값 보다 작으면 for문을 돌아 push를 해서 stack에 현재 값을 저장하고
input 값과 현재 값이 같아지면 pop해서 꺼내준다.
현재 값이 input 값 보다 클 경우에는 input값과 stack의 제일 top 값을 비교해서 같으면 꺼내준다.
같지 않은데 꺼낼 경우에는 어차피 수열을 만들 수 없기 때문에 break문으로 for문 탈출
그냥 push, pop 밖에 하는 거 없는 것 같은데 5번이나 틀렸다.
초반에는 식을 잘 못 짜기도 했고 마지막에는 메모리 초과
찾아보니 ans를 String으로 받아서 그런거여서 String 대신 ArrayList로 바꿔주니 바로 통과 !
[코드]
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class Main_1874 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Stack<Integer> stack = new Stack<>();
int num = 0;
ArrayList<String> ans = new ArrayList<>();
for (int i = 0; i < n; i++) {
int nn = sc.nextInt();
if (num < nn) {
for (int j = num; j < nn; j++) {
num++;
stack.add(num);
ans.add("+");
}
} else if (num > nn) {
if (stack.peek() == nn) {
stack.pop();
ans.add("-");
} else {
break;
}
}
if (num == nn) {
stack.pop();
ans.add("-");
}
}
if (stack.isEmpty()) {
for (int i = 0; i < ans.size(); i++) {
System.out.println(ans.get(i));
}
} else {
System.out.print("NO");
}
}
}
'Algorithm > BaekJoon' 카테고리의 다른 글
[BOJ] 10845. 큐 (0) | 2020.02.07 |
---|---|
[BOJ] 1406. 에디터 (0) | 2020.02.07 |
[BOJ] 9093. 단어 뒤집기 (0) | 2020.02.06 |
[BOJ] 2455. 지능형 기차 (0) | 2019.12.15 |
[BOJ] 2606. 바이러스 (0) | 2019.08.22 |