일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 #mysql #알고리즘 #자동차 대여 기록에서 장기/단기 대여 구분하기 #코린이 #개발자 #study
- 프로그래머스 #아픈 동물 찾기 #mysql #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #나이 정보가 없는 회원 수 구하기 #mysql #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #역순 정렬하기 #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #알고리즘 #코린이 #개발자 #study
- mysql #min() #max() #최소값 #최대값 #코린이 #개발자 #study
- 백준 #4153 #직각삼각형 #알고리즘 #자바 #java #코린이 #개발자 #study
- 특정 옵션이 포함된 자동차 리스트 구하기 #코린이 #개발자 #study
- 백준 #
- 프로그래머스 #mysql #경기도에 위치한 식품창고 목록 출력하기 #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #동명 동물 수 찾기 #알고리즘 #코린이 #개발자
- 프로그래머스 #가장 큰 물고기 10마리 구하기 #mysql #알고리즘 #코린이 #개발자 #study
- 백준 #다이얼 #5622 #알고리즘 #자바 #java #코린이 #개발자 #study
- 프로그래머스 #잡은 물고기 중 가장 큰 물고기의 길이 구하기 #알고리즘 #mysql #코린이 #개발자 #study
- 코린이 #개발자 #study
- 프로그래머스 #잡은 물고기의 평균 길이 구하기 #mysql #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #12세 이하인 여자 환자 목록 출력하기 #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #과일로 만든 아이스크림 고르기 #mysql #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #알고리즘 #어린 동물 찾기 #코린이 #개발자 #study
- 프로그래머스 #알고리즘 #mysql #인기있는 아이스크림 #코린이 #개발자 #study
- 프로그래머스 #python 개발자 찾기 #알고리즘 #mysql #코린이 #개발자 #study
- 프로그래머스 #mysql #흉부외과 또는 일반외과 의사 목록 출력하기 #알고리즘 #코린이 #개발자 #study
- 백준 #일곱 난쟁이 #2309 #자바 #java #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #동명 동물 수 찾기 #mysql #데이터베이스 #db #코린이 #개발자 #알고리즘
- 프로그래머스 #한 해에 잡은 물고기 수 구하기 #mysql #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #조건에 맞는 회원수 구하기 #mysql #알고리즘 #코린이 #개발자 #study
- 백준 #네 번째 점 #3009 #자바 #java #알고리즘 #코린이 #개발자 #study
- 프로그래머스 #mysql #알고리즘 #이름이 있는 동물의 아이디 #코린이 #개발자 #study
- 프로그래머스 #모음 제거 #알고리즘 #자바 #java #코린이 #개발자 #study
- 프로그래머스 #알고리즘 #mysql #
- Today
- Total
luke
[자바/Java] - Stack(스택) 정리 및 활용 본문
Stack(스택) 정리 및 활용
전에 스택 구조에 대해 설명한 적이 있지만 부족한 점이 많아
이번에는 스택 구조에 대해 조금더 자세히 정리하고 활용하는 방법을 적어보려고 한다.
스택이란?
스택은 '쌓다.' 의 의미로 남자들이라면 게임하면서 캐릭터가 스킬 사용을 하기 위해 스택을 쌓는 경험을 해본 적이 있을 것이다. 즉, 데이터를 순서대로 쌓는 자료구조다.
스택은 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입선출(LIFO, Last In First Out) 구조로 되어 있다. 프로그래밍에서 데이터가 입력된 순서대로 처리되는 것이 아닌, 가장 나중에 들어온 데이터를 먼저 처리할 때 사용한다.
특징
- 후입선출(LIFO) 구조 : 먼저 들어온 데이터가 나중에 빠져나가는 구조
- 단방향 입출력 구조 : 데이터의 들어오는 방향과 나가는 방향이 같다.
- 데이터를 하나씩만 넣고 뺄 수 있다.
스택 선언
스택의 선언은 Stack<T> 변수명 = new Stack<>(); 로 선언한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
//Integer형 Stack
Stack<Integer> IntegerStack = new Stack<>();
//String형 Stack
Stack<String> StringStack = new Stack<>();
//Boolean형 Stack
Stack<Boolean> booleanStack = new Stack<>();
}
}
스택 선언은 위와 같이 Integer형, String형 Boolean형으로 총 3가지 타입으로 선언이 가능하다.
add(), push() (스택에 값 추가)
스택에 값 추가하는 함수는 add(), push() 이렇게 두 가지의 함수로 이루어져 있다.
- 공통점 : add,push 는 값을 추가하는 데 사용한다.
- 다른 점 : add는 반환값이 true / false이고 push 반환값은 집어넣은 값이 리턴된다.
import java.util.*;
public class Main {
public static void main(String[] args) {
//Integer 형 Stack
Stack<Integer> integerStack = new Stack<>();
integerStack.add(1);
integerStack.add(2);
integerStack.add(3);
integerStack.push(1);
integerStack.push(2);
integerStack.push(3);
//반환 값을 true/false로 반환
System.out.println(integerStack.add(1));
System.out.println(integerStack.push(6));
System.out.println(integerStack);
}
}
<실행 결과>
true
6
[1, 2, 3, 1, 2, 3, 6, 6]
위 실행 결과를 보면 integerStack 변수에 스택이 쌓인 걸 확인할 수 있다.
다만 위에 말했다시피 add는 true / false를 반환하기에 출력으로 확인해 보면 값이 아닌 true가 반환된다.
하지만 push 같은 경우 add와 다르게 6을 반환하는 걸 확인할 수 있다.
peak() (스택의 마지막 요소)
peak() 함수는 스택에 있는 값들 중 마지막으로 쌓인 요소를 반환한다. 즉, 스택에 먼저 사용될 요소를 반환하는 것이다.
하지만 스택이 비어있다면 예외가 발생한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
//Integer 형 Stack
Stack<Integer> integerStack = new Stack<>();
integerStack.add(1);
integerStack.add(2);
integerStack.add(3);
integerStack.push(1);
integerStack.push(2);
integerStack.push(10);
System.out.println(integerStack);
System.out.println(integerStack.peek());
}
}
<실행 결과>
[1, 2, 3, 1, 2, 10]
10
실행 결과를 보면 마지막 push()에 10이 들어간 걸 확인할 수 있으며 후입선출(LIFO)이란 말과 같이 마지막 요소를 반환 하는걸 확인할수 있다.
pop() (스택의 마지막 요소 제거)
pop() 함수는 peak() 함수와 같은 스택의 마지막 요소를 반환한다.
하지만 pop()은 peak()과 다르게 값을 반환한 뒤 스택 내에서 제거된다.
import java.util.*;
public class Main {
public static void main(String[] args) {
//Integer 형 Stack
Stack<Integer> integerStack = new Stack<>();
integerStack.add(1);
integerStack.add(2);
integerStack.add(3);
integerStack.push(1);
integerStack.push(2);
integerStack.push(10);
System.out.println(integerStack.peek());
System.out.println(integerStack);
System.out.println(integerStack.pop());
System.out.println(integerStack);
}
}
<실행 결과>
10
[1, 2, 3, 1, 2, 10]
10
[1, 2, 3, 1, 2]
실행 결과를 보면 바로 이해하기 쉽다. 처음 peak() 함수를 사용했을 때 보면 stack에는 그대로 값이 남아있는 걸 확인할 수 있다. pop() 함수를 사용했을 때를 보자 peak()과 같이 10을 반환하지만 stack전체 값을 조회해 보면 10이 제거된 걸 볼 수 있다.
empty(), clear(), contain()
- empty() : 스택이 비었는지 확인
- clear() : 스택의 모든 값 삭제
- contain() : 특정 값을 가지고 있는지 확인 (반환은 true / false)
import java.util.*;
public class Main {
public static void main(String[] args) {
//Integer 형 Stack
Stack<Integer> integerStack = new Stack<>();
Stack<Integer> emptyStack = new Stack<>();
integerStack.add(1);
integerStack.add(2);
integerStack.add(3);
integerStack.push(1);
integerStack.push(2);
integerStack.push(10);
System.out.println(integerStack.empty()); // 스택에 값들이 있는 스택
System.out.println(emptyStack.empty()); // 스택에 값들이 없는 스택
System.out.println(integerStack.contains(99)); // 스택 내에 99는 없으므로 false
System.out.println(integerStack.contains(3)); // 스택 내에 3이 있으므로 true
integerStack.clear();
System.out.println(integerStack);
}
}
<실행 결과>
false
true
false
true
[]
실행 결과를 확인해 보자 (추가로 emptyStack을 만들어 줬다.)
- empty() : 기존에 있던 integerStack은 값들이 있으므로 false를 반환한다. 새로 만들어준 emptyStacker는 값을 추가한 게 없기에 빈 스택이므로 true를 반환했다.
- contain() : 99는 스택 내에 없는 값이므로 false, 3은 있는 값이므로 true를 반환했다.
- clear() : clear() 함수를 쓴 뒤 출력했을 때 스택의 값은 다 삭제되므로 빈 스택인걸 확인할 수 있다.
이렇게 Stack에 대해 조금 더 자세히 정리해보고 활용하는 방법을 남겨봤다.
비전공자로써 조금더 기본기가 탄탄해야겠다 생각이 한 번 더 들고 요즘 개발 시장이 어렵다는 이야기가 많이 나오는데 나 또한 포기하지 않고 해야겠다. 모든 개발자 취준생 분들 파이팅입니다!!!!
'Study > Java' 카테고리의 다른 글
[자바/Java] - 진법 변환 (Integer, BigInteger) (n 진수 <-> 10진수) (0) | 2024.05.21 |
---|---|
[자바/Java] - indexOf(), substring() (문자열 자르기) (0) | 2024.04.21 |
[자바/Java] - compareTo() (문자열, 숫자 비교) (0) | 2024.04.17 |
[자바/Java] - instanceof 연산자 (0) | 2024.01.14 |
[자바/Java] - 다형성(1)(다운캐스팅, 업캐스팅) (0) | 2024.01.14 |