일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 집합
- 스택
- 완전탐색
- 알고리즘
- lcap
- Recursion
- 그래프
- 트리
- MySQL
- 프로그래머스
- Mendix
- git
- 자료구조
- 정렬
- microflow
- 해시맵
- 매개변수 탐색
- 가중치없는그래프
- domain model
- algorithm
- Bruteforce
- 백트래킹
- 재귀
- 자바
- Sort
- 반효경교수님
- 이분탐색
- dfs
- 멘딕스
- SQL
- Today
- Total
목록스택 (7)
mondegreen
지문에서 보조 컨테이너 벨트는 스택으로 구현해야 함을 파악할 수 있었다. 앞에 위치한 상자와 보조 컨테이너 벨트를 모두 체크해야 했고 두 곳에서 찾을 수 없는데 앞에 위치한 상자보다 실어야 할 상자 수가 더 작다면 더 실을 수 있는 가능성이 없기 때문에 바로 return 처리 했다. import java.util.*; class Solution { public int solution(int[] order) { int answer = 0; Deque stk = new ArrayDeque(); // index는 1부터 시작하는데 int index = 1; // order 반복문을 돌면서 for(int i = 0; i
커서가 이동하기 위해서는 스택을 두개 사용하는 것이 필요할 것 같았다. 커서를 기준으로 왼쪽과 오른쪽 스택을 별도로 구현하고 커서를 기준으로 양쪽으로 이동시켜주면 된다. 커서 이동과 삭제 시마다 스택이 비어있는지 확인하는 것은 필수이고 커서가 중간에 위치한채로 입력이 끝날 수 있기 때문에 오른쪽 스택에 존재하는 값을 왼쪽으로 모두 옮겨준 후에 stringbuilder로 문자열화해주고 역순으로 처리해주면 된다. package BaekJoon.stack; import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class BJ5397 { public static void main(String[] args) { S..
[Part2-Chapter02-Clip04] -백준 2504 괄호의 값 짝이 되는 괄호를 if 문으로 복잡하게 쓰지 않기 위해 map에 담아서 짝을 맞추도록 했고 소괄호와 대괄호를 2와 3으로 매칭시키는 것도 map을 활용했다. 값을 넣을 때마다 최근 넣은 값을 저장한다. 괄호가 열릴 때마다 곱을 해주고 닫힐 때마다 다시 해당하는 수로 나누어서 결과값을 갱신시키는 방식으로 풀이했다. 가장 먼저 예외처리할 부분은 괄호가 짝이 맞도록 닫히지 않는다면 0을 반환해야 한다. 따라서 일단 입력값의 길이가 홀수라면 바로 0을 반환하고, stack을 활용해 괄호가 잘 닫히고 있는지도 확인하여 스택에 남은 값이 있다면 0을 반환하도록 구현했다. 여는괄호인 경우 스택에 담아주고 해당하는 숫자를 곱해준다. 닫는 괄호인 경..
구하고자 하는 것은 특정일자의 가격을 기준으로 가격이 떨어진 날까지의 기간이므로 그 날짜들을 구분할 수 있는 인덱스를 가지고 활용해야 한다. 따라서 스택에 들어갈 값은 배열의 인덱스이다. 여기서 스택을 활용할 수 있다고 생각하게 되는 지점은 앞으로의 주식 가격이 아닌 이전 주식가격들과 비교해서 기간을 구한다는 점이다. 따라서 현재 주식 가격보다 가장 최근 주식 가격이 더 높다면 해당 가격을 가진 날짜는 하루 동안 떨어지지 않은 것이고 해당 날짜를 스택에서 제거한다. 정답 배열에 값을 넣을 때는 제거될 스택의 값이 더 이상 고려되지 않아도 되는 값이고 구간이 정해지는 값이므로 제거될 스택의 값을 정답 배열의 인덱스로 잡고 현재 넣고자 하는 인덱스와의 차를 구해 기간을 담으면 된다. 그리고 또 다시 가장 최..
스택을 deque로 활용함으로써 자료구조를 양껏 활용한 풀이이다. 다만 값을 빼고 넣는 순서를 헷갈리기 쉽다. import java.util.*; class Solution { public int solution(String s) { char[] target = s.toCharArray(); // 기본 문자열 스택에 담아 놓기 Deque base = new ArrayDeque(); for(int i = 0; i
Vector를 상속받아 구현되어 있는 Stack 대신 Deque로 stack을 구현해서 문제를 풀었다. import java.util.*; class Solution { boolean solution(String s) { char [] str = s.toCharArray(); Deque stk = new ArrayDeque(); for(char i : str){ if(i == '(') stk.push(i); else{ if(!stk.isEmpty() && stk.peek()=='(') stk.pop(); else return false; } } return stk.isEmpty(); } }
Stack(스택) 선형의 자료구조로서 후입선출(LIFO)의 특징을 가진다. 자료의 삽입: push / 자료의 삭제: pop / 가장 상단의 값: top / 가장 상단 값 반환: peek / 스택의 크기: size Stack stk = new Stack(); 라이브러리가 존재하여 다른 자료구조로 구현할 필요가 없음 Queue(큐) 선형의 자료구조로서 선입선출(FIFO)의 특징을 가진다. 중간에 원소삽입이 불가하며 뒤쪽으로 순서대로 자료를 삽입할 수 있다. LinkedList로 구현한다. 자료의 삽입: offer / 자료의 삭제: poll / 제일 마지막 값 반환: peek / 스택의 크기: size ** 큐의 매서드 add, remove, element는 예외를 발생시킴 offer, poll, peek은 ..