스택/큐
기능개발
import math
def solution(progresses, speeds):
answer = []
days = [math.ceil((100 - progress) / speed) for progress, speed
in zip(progresses, speeds)]
# Initialize the first deployment
current_deployment = days[0]
count = 0
for day in days:
if day <= current_deployment:
count += 1
else: # day > current_deployment
answer.append(count)
current_deployment = day
count = 1
# Append the count for the last deployment
answer.append(count)
return answer
math 메서드 이용해서 days 구하는 것까진 했는데 그 뒤에 배열 묶는 법을 생각 못하겠어서 gpt한테 물어봤다.. 그리고 원래 days 구할 때 for문으로 배열 직접 접근했는데 zip함수 사용하면 한줄로 코드를 끝낼 수 있었다.
import java.lang.Math;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int n = progresses.length;
int[] days = new int[n];
List<Integer> answerList = new ArrayList<>();
for (int i = 0; i < n; i++) {
int progress = progresses[i];
int speed = speeds[i];
days[i] = (int) Math.ceil((100.0 - progress) / speed);
}
int current_deployment = days[0];
int count = 0;
for (int i = 0; i < n; i++) {
if (days[i] <= current_deployment) {
count++;
}
else {
answerList.add(count);
current_deployment = days[i];
count = 1;
}
}
answerList.add(count);
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
파이썬 코드 자바로 변경
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;
}
}
double remain = (100 - progresses[i]) / (double) speeds[i];
double로 형변환을 해줘야 remain에도 double값이 들어간다.
int date = (int) Math.ceil(remain);
remain을 반올림해서 int 형변환을 해줘야 원하는 값이 date에 저장된다.
q.peek()
q.offer(x)
answerList라는 ArrayList를 만들어서 date의 크기에 따라 값을 넣고 clear 한다. 마지막으로 ArrayList를 Array로 바꾸어서 반환하면 성공! 큐를 이용한 정석적인 풀이라 생각한다.