New World
[Zero-Base #01] 스택 본문
728x90
반응형
이번 제로베이스에서는 자료 구조 중 스택이라는 것에 대해 배우는 시간이었다.
자료구조에는 흔히 배열, 스택(LIFO), 큐 (FIFO) 가 있다.
그중 스택에 대해 정리해보려 한다.
스택
- LIFO(Last In First Out) : 후입 선출, 마지막에 삽입된 것을 먼저 내보내는 것
- 데이터를 역순으로 처리할 때 사용한다.
스택 연산
CreatS 연산 => 빈 스택을 생성하고 반환, 스택의 크기를 정할 수 있다 (컴파일 시)
PUSH 연산 => 스택의 공간에서 삽입을 담당
POP 연산 => 스택의 공간에서 삭제를 담당
스택의 사용
- 시스템 스택 : 함수의 호출과 복귀 순서는 스택의 구조를 응용하여 관리할 수 있다
- 그외 : 역순 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환
*스택 오버플로우는 무엇인가?
스택 포인터가 스택의 경계를 넘어 설 때 일어나는 것, 호출 스택은 제한된 양의 주소공간을 이루며 프로그램 시작 시 결정된다.
그외 : https://hellowworlds.tistory.com/170
필수 문제
포스택
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //받는 숫자
int n = scan.nextInt();
//순열 A
ArrayList<Integer> listA = new ArrayList<>();
for(int i = 0; i < n; i++) {
listA.add(scan.nextInt());
}
//네 개의 스택
Stack<Integer>[] stacks = new Stack[4];
//네 개의 스택 0으로 초기화
for(int i = 0; i < 4; i++){
stacks[i] = new Stack<>();
stacks[i].push(0);
}
for(int i = 0; i < listA.size(); i++){ //순열 A 돌리기
boolean possible = false;
for(int j = 0; j < 4; j++){ //스택 쌓기
if(listA.get(i) > stacks[j].peek()){ //스택에 삽입할 값이 peek 보다 크면 삽입
stacks[j].push(listA.get(i));
possible = true;
break;
}
}
if (!possible){ //모든 스택에 삽입하지 못했다면
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
}
추가 문제
같은 숫자는 싫어
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<>();
list.add(arr[0]); //첫번째는 그냥 입력
for(int i = 1; i < arr.length; i++){
if(arr[i - 1] != arr[i]){ //두번째부터 비교하면서 입력 (그 전에 입력했던 값과 비교)
list.add(arr[i]);
}
}
int[] answer = list.stream().mapToInt(i->i).toArray(); //int 배열로 변환
return answer;
}
}
반응형
'Self-Study > Study' 카테고리의 다른 글
[Zero-base #03] 배열 (0) | 2023.03.15 |
---|---|
[Zero-base #02] 큐 (0) | 2023.03.15 |
[개념 정리 #12] 나중에 다시 정리할 것들 (0) | 2022.10.27 |
[개념정리 #10] Database (0) | 2022.10.26 |
[개념 정리 #9] RESTful API (REpresentational State Transfer) & TDD (0) | 2022.10.13 |
Comments