-
[프로그래머스] [JAVA] [Level 2] [스택/큐] 기능개발PROGRAMMERS/스택&큐 2022. 10. 5. 02:12
1. Stack
import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { Stack<Integer> stk = new Stack<>(); ArrayList<Integer> al = new ArrayList<>(); int count=1; for(int i=0; i<speeds.length; i++){ // ex1) 7, 3, 9 double remain = (100 - progresses[i]) / (double) speeds[i]; int date = (int) Math.ceil(remain); // 비어있을 때 if(stk.isEmpty()){ stk.push(date); } else{ // stk에 쌓인 값이 이번 작업일보다 작을 때 if(stk.peek() < date){ // 스택을 초기화 시켜주고 이번 작업일을 넣어준다. // 초기화(작업을 마침) 했기 때문에 al에 배포가능한 개수(count)를 넣어줌 // 배포가능한 개수(count)를 넣어주었기 때문에 count 초기화 stk.clear(); stk.push(date); al.add(count); count = 1; } else { // stk에 쌓인 값이 이번 작업일보다 클 때는 그냥 카운트만 올려준다. // 이번 작업일은 굳이 넣어줄 필요가 없음 count++; } } } // 마지막에 남은 배포가능한 개수(count)를 넣어줌 al.add(count); int[] answer = new int[al.size()]; for(int i=0; i<al.size(); i++){ answer[i] = al.get(i); } return answer; } }
Stack 자료 구조
- LFIO 구조 - > LAST IN FIRST OUT , 나중에 들어간 것이 먼저 나옴
- import java.util.Stack -> import
- Stack<Integer> stack = new Stack<>() -> int형 스택 선언
- stack.isEmpty() -> Stack 비어있는지 true ,false로 반환
- stack.push() -> Stack 에 값 추가
- stack.pop() -> Stack 가장 최근 값을 꺼냄(삭제)
- stack.clear() -> Stack 초기화
- stack.peek() -> Stack의 가장 최근 값 조회
2. 다른사람의 풀이 Queue
import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { Queue<Integer> q = new LinkedList<>(); List<Integer> answerList = new ArrayList<>(); for (int i = 0; i < speeds.length; i++) { double remain = (100 - progresses[i]) / (double) speeds[i]; int date = (int) Math.ceil(remain); if (!q.isEmpty() && q.peek() < date) { answerList.add(q.size()); q.clear(); } q.offer(date); } answerList.add(q.size()); int[] answer = new int[answerList.size()]; for (int i = 0; i < answer.length; i++) { answer[i] = answerList.get(i); } return answer; } }
Queue 자료 구조
- FIFO 구조 - > FIRST IN FIRST OUT , 먼저 들어간 것이 먼저 나옴
- import java.util.Queue, import java.util.LinkedList -> import
- Queue<Integer> queue = new Queue<>() -> int형 큐 선언
- que.isEmpty() -> 비어있는지 true ,false로 반환
- que.offer(), que.add() -> 값 추가
- que.poll() -> 첫 번째 값을 반환하고 제거, 없다면 null
- que.remove() -> 첫 번째 값을 삭제
- que.clear() -> que 초기화
- que.peek() -> Stack의 가장 최근 값 조회
'PROGRAMMERS > 스택&큐' 카테고리의 다른 글
[프로그래머스] [JAVA] [Level 2] [스택/큐] 더 맵게 (0) 2022.10.28 [프로그래머스] [JAVA] [Level 2] [스택/큐] 프린터 (0) 2022.10.07 [프로그래머스] [JAVA] [Level 2] [스택/큐] 올바른 괄호 (0) 2022.09.14 PROGRAMMERES Level 1 스택/큐 같은 숫자는 싫어 (JAVA 자바) (0) 2022.08.17