🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

CodingTest/Programmers

[프로그래머스 고득점 Kit] 기능개발 - Stack/Queue - Lv2

JONG_UK 2023. 6. 1. 14:44
728x90
반응형
SMALL

⭐️ 코드 (Queue 이용)

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        ArrayDeque<Integer> speedsQueue = new ArrayDeque<>();
        for (int i = 0; i < progresses.length; i++) {
            queue.addLast(progresses[i]);
            speedsQueue.addLast(speeds[i]);
        }
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (!queue.isEmpty()) {
            for (int i = 0; i < queue.size(); i++) {
                int a = queue.pollFirst();
                int b = speedsQueue.pollFirst();
                queue.addLast(a + b);
                speedsQueue.addLast(b);
            }
            // 100이 넘으면
            if (queue.peekFirst() >= 100) {
                int cnt = 0;
                while (true) {
                    if (queue.isEmpty() || queue.peekFirst() < 100) {
                        break;
                    }
                    if (queue.peekFirst() >= 100) {
                        queue.pollFirst();
                        speedsQueue.pollFirst();
                        cnt++;
                    }
                }
                arrayList.add(cnt);
            }
        }

        int[] answer = new int[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            answer[i] = arrayList.get(i);
        }

        return answer;
    }
}

💊 오답 노트

정답 코드지만 처음 풀었을 때 사용했던 코드다. 큐나 스택을 사용하지 않고 풀었던 풀이. 뭔가 조잡하다!!!

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int completed = 0;

        ArrayList<Integer> result = new ArrayList<Integer>();
        while (!(completed == progresses.length)) {

            for(int i = 0; i < progresses.length; i++) {
                progresses[i] += speeds[i];
            }
            int res = completed;
            if(progresses[completed] >= 100) {
                completed++;
                for(int i = completed; i<progresses.length; i++) {
                    if(progresses[completed] >= 100) {
                        completed++;
                    }
                }
                result.add(completed - res);
            }
            
        }
        int[] answer = new int[result.size()]; // return 값 저장되는 배열
        for(int i = 0; i<answer.length; i++) {
            answer[i] = result.get(i);
        }

        return answer;
    }
}

이제 큐를 이용해서 풀어봤는데 시간이 더 많이 걸린다. 뭐가 맞는 코드인지는 모르겠다 ㅎㅎ

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        ArrayDeque<Integer> speedsQueue = new ArrayDeque<>();
        for (int i = 0; i < progresses.length; i++) {
            queue.addLast(progresses[i]);
            speedsQueue.addLast(speeds[i]);
        }
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (!queue.isEmpty()) {
            for (int i = 0; i < queue.size(); i++) {
                int a = queue.pollFirst();
                int b = speedsQueue.pollFirst();
                queue.addLast(a + b);
                speedsQueue.addLast(b);
            }
            // 100이 넘으면
            if (queue.peekFirst() >= 100) {
                int cnt = 0;
                while (true) {
                    if (queue.isEmpty() || queue.peekFirst() < 100) {
                        break;
                    }
                    if (queue.peekFirst() >= 100) {
                        queue.pollFirst();
                        speedsQueue.pollFirst();
                        cnt++;
                    }
                }
                arrayList.add(cnt);
            }
        }

        int[] answer = new int[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            answer[i] = arrayList.get(i);
        }

        return answer;
    }
}

👀 후기

이 문제는 시뮬레이션처럼 푸는건지,, 큐를 이용해서 푸는건지... 음...냐..

시간은 큐가 더 느리긴한데.... 누가 설명좀해주세요...!!

 
728x90
반응형
LIST