📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/42586
💡 접근
큐이용해서 작업량이 100이 넘어갔을 때 그 뒤에 작업들도 완료 가능한지 확인한다.
효율성을 생각하면 큐에 있는 작업이 100이상이 되는 만큼 한번에 증가시키면 될듯..
👩💻 코드
import java.util.*;
class Solution {
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static char[] c = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
static int[] arr;
static char[] arr2;
static HashMap<Character, Integer> map;
static boolean[] visited;
static String[] clone;
static int answer;
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Queue<Point> q = new LinkedList<>();
ArrayList<Integer> list = new ArrayList<>();
//큐에 작업의 진도 넣기
for(int i = 0; i < progresses.length; i++) q.offer(new Point(progresses[i], speeds[i]));
//작업의 개발 속도 만큼 증가 시키기
while(!q.isEmpty()) {
int len = q.size();
for (int i = 0; i < len; i++) {
Point cp = q.poll();
q.offer(new Point(cp.progress + cp.speed, cp.speed));
}
int cnt = 0;
while(q.peek().progress >= 100) {
q.poll();
cnt++;
if(q.isEmpty()) break;
}
if(cnt > 0) list.add(cnt);
}
answer = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
System.out.println(Arrays.toString(answer));
return answer;
}
public static void main(String[] args) {
Solution s = new Solution();
int n = 2;
int[] progresses = {95, 90, 99, 99, 80, 99};
int[] speeds = {1, 1, 1, 1, 1, 1};
s.solution(progresses, speeds);
}
private class Point {
private int progress;
private int speed;
public Point(int progress, int speed) {
this.progress = progress;
this.speed = speed;
}
@Override
public String toString() {
return "Point{" +
"progress=" + progress +
", speed=" + speed +
'}';
}
}
}
'Algorithm > programmers' 카테고리의 다른 글
타겟넘버 (0) | 2022.02.24 |
---|---|
더 맵게 (0) | 2022.02.24 |
[2017 카카오코드]단체사진 찍기 (0) | 2022.02.23 |
[2017 카카오코드]카카오프렌즈 컬러링북 (0) | 2022.02.23 |
[2019 카카오 블라인드]오픈채팅방 (0) | 2022.02.23 |