-
[프로그래머스] 기능개발 - Java알고리즘 문제 풀이 2024. 5. 8. 16:07
문제 - 기능개발
https://school.programmers.co.kr/learn/courses/30/lessons/42586
문제 설명
제한사항
입출력 예
progresses speeds return [90, 30, 55] [1, 30, 5] [2, 1] [95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]
접근 방법
- 문제를 보면 작업이 순서대로 진행되어야 한다 이런 것을 봤을때 자료구조 큐를 활용하면 될 것 같다
- 큐가 빌때까지 작업을 실행하고 전의 작업이랑 그다음 작업이 크거나 같으면 count 증가하고 아니면 count를 리스트에 추가 하는 식으로 하면 될 것 같다
코드 작성
import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Queue; class Solution { public int[] solution(int[] progresses, int[] speeds) { Queue<Integer> queue = new LinkedList<>(); for (int i = 0; i < progresses.length; i++) { if ((100 - progresses[i]) % speeds[i] == 0) { queue.add((100 - progresses[i]) / speeds[i]); } else { queue.add((100 - progresses[i]) / speeds[i] + 1); } } List<Integer> list = new ArrayList<>(); int x = queue.poll(); int count = 1; while (!queue.isEmpty()) { if (x >= queue.peek()) { count++; queue.poll(); } else { list.add(count); count = 1; x = queue.poll(); } } list.add(count); return list.stream().mapToInt(value -> value).toArray(); } }
문제 풀고 느낀점
- 이 문제는 배열로도 풀 수 있고 큐로도 풀 수 있다 하지만 순서가 있으므로 큐가 맞다 생각해서 풀었던 문제이다
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 1926 그림 - Java (0) 2024.05.14 [프로그래머스] 의상 - Java (0) 2024.05.09 [프로그래머스] 스킬트리 - Java (0) 2024.05.08 [프로그래머스] 같은 숫자는 싫어 - Java (0) 2024.05.06 [백준] 9372 상근이의 여행 - Java (0) 2024.05.03