본문 바로가기

스택14

[프로그래머스] 176962번 - 과제 진행하기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/176962 문제 설명 과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.과제는 시작하기로 한 시각이 되면 시작합니다.새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다.진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다.멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다.과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해주세요. 제한사항3 ≤.. 2025. 3. 6.
[백준] 2257번 - 화학식량 [Java] https://www.acmicpc.net/problem/2257 1.  아이디어 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 괄호와 화학식량을 모두 넣기 위해 String 객체를 받는 Stack을 만들었다. 숫자가 등장하면 이전 화학식에 곱해야하므로 Stack에서 꺼내서 곱하고 다시 넣었고, 열린 괄호나 원소면 숫자로 변경해서 넣었다. 닫힌 괄호면 열린 괄호가 나올 때까지 꺼내서 더한 후 다시 Stack에 넣으면 된다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader .. 2025. 2. 18.
[SWEA] 5432번 - 쇠막대기 자르기 [Java] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm 1.  아이디어 Stack 자료구조를 활용하면 해결할 수 있다.2. 문제풀이 열린 괄호 뒤에 닫힌 괄호가 오면 레이저, 닫힌 괄호 뒤에 닫힌 괄호가 오면 쇠막대기의 끝 부분이 된다. 이를 위해 현재 괄호 이전에 어떤 괄호가 나왔는지 before 변수에 저장하는 방식으로 구현했다. 열린 괄호는 쇠막대기의 시작 또는 레이저 후보이므로 일단 Stack에 넣고 닫힌 괄호가 등장했을 때 레이저면 지금까지 등장한 쇠막대기의 수만큼 조각이 생기고, 닫힌 괄호가 쇠막대기의 끝이면 해당 쇠막대기 조각 1개가 생긴다.3. 코드 import java.io... 2025. 2. 13.
[SWEA] 8931번 - 제로 [Java] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jBWLq7jwDFATQ 1.  아이디어 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 0이면 Stack에서 pop, 0이 아니면 Stack에 push를 하면 간단하게 영수증을 구현할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Solution { public static void main(String[] args) throws IOException {// BufferedReader br = new BufferedReader(new InputStreamRead.. 2025. 2. 13.
[백준] 9935번 - 문자열 폭발 [Java] https://www.acmicpc.net/problem/9935 1.  아이디어 문자열을 Deque에 담으며 폭발 문자열의 마지막 글자를 발견하면 폭발 문자열인지 임시 Stack으로 판단하는 방식으로 해결했다.2. 문제풀이 문자열의 각 문자를 일단 Deque에 담고 해당 문자가 폭발 문자열의 마지막 문자면 Deque에서 최근에 담은 문자들을 하나씩 Stack으로 옮기며 폭발 문자열이 맞는지 검증했다. 폭발 문자열이면 Stack을 초기화하면 되고 폭발 문자열이 아니면 Stack의 문자들을 다시 Deque에 넣어주는 과정을 반복하면 된다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String.. 2025. 2. 12.
[백준] 2504번 - 괄호의 값 [Java] https://www.acmicpc.net/problem/2504 1.  아이디어 String 객체를 받는 Stack 자료구조를 활용해서 해결했다.2. 문제풀이 주어진 연산식을 직접 Stack에서 구현하는 방식을 활용했다.Stack에는 괄호와 연산 결과인 숫자까지 저장해야 했어서 String 타입으로 통일해서 관리했다. 괄호가 4종류에 연산 결과인 숫자까지 다뤄야 했어서 조건 분기가 좀 복잡하지만 닫힌 괄호일 때, 매칭이 되는가, 다른 타입의 괄호인가, 숫자인가를 구분하고 이에 따른 연산을 처리해주는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) t.. 2025. 2. 12.
[백준] 10828번 - 스택 [Java] https://www.acmicpc.net/problem/10828 1.  아이디어 Stack을 직접 구현하는 문제로 편의상 Deque를 활용했다.2. 문제풀이 명령의 처리는 switch문을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.. 2025. 2. 12.
[백준] 9012번 - 괄호 [Java] https://www.acmicpc.net/problem/9012 1.  아이디어 괄호가 서로 소거되서 완전히 사라지면 올바른 문자열이 되는 문제로 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 열린 괄호면 Stack에 push하고 닫힌 괄호면 Stack이 비어있지 않을 때 pop을 하면 괄호가 쌍을 이루는 것을 구현할 수 있다. 최종적으로 Stack이 비어있어야 올바른 문자열이 된다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRead.. 2025. 2. 11.
[백준] 4949번 - 균형잡힌 세상 [Java] https://www.acmicpc.net/problem/4949 1.  아이디어 소괄호와 대괄호가 모두 서로 소거되면 되는 문제로 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 StringTokenizer로 괄호를 기준으로 파싱한 후 괄호에 대해서 Stack으로 매핑을 시켜주는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buffe.. 2025. 2. 11.
[백준] 3986번 - 좋은 단어 [Java] https://www.acmicpc.net/problem/3986 1.  아이디어 단어를 아치형 곡선으로 쌍을 짓는다는 점에서 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 각 단어에 대해 Stack이 비어있거나 Stack의 peek와 일치하지 않는 경우 Stack에 넣고 일치하면 Stack에서 빼는 걸 반복했을 때 좋은 단어는 전부 쌍을 이뤄서 Stack이 비게되는 점을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedR.. 2025. 2. 11.
[백준] 10799번 - 쇠막대기 [Java] https://www.acmicpc.net/problem/10799 1.  아이디어 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 레이저는 현재 괄호가 닫힌 괄호면서 직전 괄호가 열린 괄호일 때고 잘린 쇠막대기의 수는 등장한 열린 괄호의 수만큼이다. 쇠막대기가 끝날 때도 개수로 세는 점만 고려해서 Stack의 크기가 잘려지는 막대기의 개수가 됨을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new Input.. 2025. 2. 11.
[백준] 5397번 - 키로거 [Java] https://www.acmicpc.net/problem/5397 1.  아이디어 현재 커서의 앞에 있는 문자들과 뒤에 있는 문자들을 각각 담는 Deque, Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 현재 커서의 바로 앞 문자가 peek로 오는 Deque와 현재 커서 바로 뒤 문자가 peek로 오는 Stack으로 명령들을 처리하면 됐다. 백스페이나 화살표가 주어지면 해당 자료구조로 커서의 이동 및 문자 삭제를 수행하고 글자가 오면 커서 앞에 삽입하도록 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException .. 2025. 2. 11.