1102 : 스택 (stack)
제한시간1000 ms 메모리제한32 MB 해결횟수3817 회 시도횟수7357 회
문제
Stack은 "더미"란 뜻을 가진다.
책 더미, 신문 더미 등에 사용하는 단어이다.
책 더미를 예로 들어 보자.
책 더미를 쌓았다고 했을 때, 이 책 더미에서 책을 가져오는 가장 정상적인 방법은 제일 위에 있는 책을 가져오는 방식이다.
다시 말하면 가장 먼저 들어간 책은 가장 나중에 꺼낼 수 있을 것이다.
이런식으로 자료가 가장 밑에 쌓이고(입력). 자료를 가져올 때(출력)는 가장 위(최근)의 자료를 가져오는 자료구조를 Stack하고 한다.
이러한 Stack의 특징 때문에 흔히 "FILO(First-In-Last-Out : 선입후출)" 혹은 "LIFO(Last-In-First-Out : 후입선출)"라고 한다.
그림과 같이 Stack을 설계하고 다음의 처리조건에 맞는 출력을 하시오.
<처리조건>
주어진 명령은 다음의 3가지이다.
1. "i a"는 a라는 수를 스택에 넣는다. 이때, a는 10,000 이하의 자연수이다.
2. "o"는 스택에서 데이터를 빼고, 그 데이터를 출력한다. 만약 스택이 비어있으면, "empty"를 출력한다.
3. "c"는 스택에 쌓여있는 데이터의 수를 출력한다.
입력형식
첫 줄에 N이 주어진다. N은 주어지는 명령의 수이다. (1≤N≤100) 둘째 줄부터 N+1줄까지 N개의 명령이 주어지는데, 한 줄에 하나씩 주어진다.
출력형식
각 명령에 대한 출력 값을 한 줄에 하나씩 출력한다. 출력내용이 하나도 없는 경우는 주어지지 않는다.
import java.util.Scanner;
public class Main {
private static Scanner sc;
public static int[] result;
public static void main(String[] args) {
sc = new Scanner(System.in);
// stack
int stack[] = new int[100]; // 배열
int top = 0; // 스택의 층
// 명령의 수
int N = sc.nextInt();
// 명령
String cmd;
sc.nextLine(); // 개행문자 제거
for (int i = 0; i < N; ++i) {
cmd = sc.nextLine(); // 명령 입력
// insert
if ('i' == (cmd.toCharArray()[0])) {
/*
* 명령과 공백을 제외한 2번부터 값 입력 문자형으로 받은 문자를 Integer.parseInt 활용 10진수 'int'형으로 변환
*/
stack[top++] = Integer.parseInt(cmd.substring(2));
// out
} else if ("o".equals(cmd)) {
if (top == 0)
System.out.println("empty");
else
System.out.println(stack[--top]);
// count
} else if ("c".equals(cmd)) {
System.out.println(top); // top의 사이즈 = 층의 갯수
}
}
}
}
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=382&sca=2070
'Algorithm > 문제 풀이' 카테고리의 다른 글
[BAEKJOON_1547 - JAVA] 공 (0) | 2020.02.02 |
---|---|
[JUNGOL_1697 - JAVA] 큐(queue) (0) | 2020.01.27 |
[JUNGOL_1309 - JAVA] 팩토리얼 (0) | 2020.01.27 |
[JUNGOL_2604 - JAVA] 그릇 (0) | 2020.01.25 |
[JUNGOL_2813 - JAVA] 소수의 개수 (0) | 2020.01.25 |