All :L
[BOJ/Java] 스택 (10828) 본문
반응형
1. 문제 분석
문제 개요
- 스택 자료구조를 사용하여 여러 가지 명령어를 처리하는 문제이다. 명령어는
push
,pop
,top
,size
,empty
가 있다. - 각 명령어에 대한 처리를 구현해야 한다.
입력 형식
- 첫 줄에 명령어의 수
n
이 주어진다. - 다음
n
개의 줄에는 명령어와 해당 값이 공백으로 구분되어 주어진다.
출력 형식
- 각 명령어에 대한 결과를 출력한다.
2. 알고리즘 종류
이 문제는 스택을 이용한 시뮬레이션 문제이다. 주어진 명령어를 스택을 통해 처리하고, 각 명령어의 결과를 출력해야 한다.
3. 주요 부분 및 코드 작성 방법
1. 스택 생성 및 명령어 처리
- 스택 자료구조를 사용하여 각 명령어에 따라 적절한 연산을 수행한다.
- 명령어에 따라
push
,pop
,top
,size
,empty
의 동작을 구현한다.
2. 명령어에 따른 동작
push
: 스택에 값을 추가한다.pop
: 스택에서 값을 제거하고 출력한다. 스택이 비어있다면-1
을 출력한다.top
: 스택의 최상단 값을 출력한다. 스택이 비어있다면-1
을 출력한다.size
: 스택의 현재 크기를 출력한다.empty
: 스택이 비어있으면1
, 그렇지 않으면0
을 출력한다.
4. 코드 설명
메인 함수 (main
)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 객체 생성
int n = Integer.parseInt(br.readLine()); // 명령어의 수를 입력받아 정수형으로 변환
Stack<String> stack = new Stack<>(); // 문자열을 저장할 스택 생성
for (int i = 0; i < n; i++) { // 명령어의 수만큼 반복
String[] command = br.readLine().split(" "); // 명령어와 값을 공백으로 분리하여 배열에 저장
switch (command[0]) { // 명령어 종류에 따라 처리
case "push": // push 명령어일 경우
stack.push(command[1]); // 스택에 값을 추가
break;
case "pop": // pop 명령어일 경우
if (stack.isEmpty()) { // 스택이 비어있는지 확인
System.out.println(-1); // 비어있다면 -1 출력
} else {
System.out.println(stack.pop()); // 스택의 최상단 값 제거 후 출력
}
break;
case "top": // top 명령어일 경우
if (stack.isEmpty()) { // 스택이 비어있는지 확인
System.out.println(-1); // 비어있다면 -1 출력
} else {
System.out.println(stack.peek()); // 스택의 최상단 값 출력
}
break;
case "size": // size 명령어일 경우
System.out.println(stack.size()); // 스택의 크기 출력
break;
case "empty": // empty 명령어일 경우
System.out.println(stack.isEmpty() ? 1 : 0); // 스택이 비어있다면 1, 그렇지 않다면 0 출력
break;
}
}
}
}
5. 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 객체 생성
int n = Integer.parseInt(br.readLine()); // 명령어의 수를 입력받아 정수형으로 변환
Stack<String> stack = new Stack<>(); // 문자열을 저장할 스택 생성
for (int i = 0; i < n; i++) { // 명령어의 수만큼 반복
String[] command = br.readLine().split(" "); // 명령어와 값을 공백으로 분리하여 배열에 저장
switch (command[0]) { // 명령어 종류에 따라 처리
case "push": // push 명령어일 경우
stack.push(command[1]); // 스택에 값을 추가
break;
case "pop": // pop 명령어일 경우
if (stack.isEmpty()) { // 스택이 비어있는지 확인
System.out.println(-1); // 비어있다면 -1 출력
} else {
System.out.println(stack.pop()); // 스택의 최상단 값 제거 후 출력
}
break;
case "top": // top 명령어일 경우
if (stack.isEmpty()) { // 스택이 비어있는지 확인
System.out.println(-1); // 비어있다면 -1 출력
} else {
System.out.println(stack.peek()); // 스택의 최상단 값 출력
}
break;
case "size": // size 명령어일 경우
System.out.println(stack.size()); // 스택의 크기 출력
break;
case "empty": // empty 명령어일 경우
System.out.println(stack.isEmpty() ? 1 : 0); // 스택이 비어있다면 1, 그렇지 않다면 0 출력
break;
}
}
}
}
반응형
'CODING > BOJ' 카테고리의 다른 글
[BOJ/Java] 괄호의 값 (2504) (0) | 2024.08.26 |
---|---|
[BOJ/Java] 괄호 (9012) (0) | 2024.08.26 |
[BOJ/Java] 알파벳 (1987) (0) | 2024.08.26 |
[BOJ/Java] 적록색약 (10026) (0) | 2024.08.25 |
[BOJ/Java] 도키도키 간식드리미 (12789) (0) | 2024.08.25 |
Comments