ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] [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의 가장 최근 값 조회

    댓글

Designed by Tistory.