https://school.programmers.co.kr/learn/courses/30/lessons/42586#
문제
개발 현황 p[]와 하루당 개발속도 s[]가 있을 때, 각 배포마다 몇 개의 기능이 배포되는지를 return
풀이
각 기능의 필요 day를 (int)Math.ceil((100.0-p[i])/s[i])로 구한 뒤,** (ceil은 올림) 큐에서 현재 값이 이전의 값인 memory보다 클 경우 리턴 값에 추가하는 방식으로 한다. 이때 마지막 값이 안들어 갈 수 있으니 따로 처리한다.
소감
씨발ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아니 로직이 맞는데 왜 틀리는지 1시간동안 봤더니, StringBuilder에서 먼저 값을 쌓은 뒤 array화 시키는 걸로 했었는데 여기가 문제가 있었다. 씨발 리스트로 하니까 되는거보소
코드 1 (원래 코드)
import java.util.*;
class Solution {
public Integer[] solution(int[] p, int[] s) {
ArrayList<Integer> list = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for(int i=0; i<p.length; i++){
int nonPro = 100-p[i];
int day = (int)Math.ceil((100.0-p[i])/s[i]);
queue.add(day);
}
int cnt = 1;
int memory = queue.poll();
while(!queue.isEmpty()){
int now = queue.poll();
if(memory>=now){
cnt++;
}
else{
list.add(cnt);
cnt = 1;
memory = now;
}
if(queue.isEmpty()){
list.add(cnt);
}
}
Integer[] answer = list.toArray(Integer[]::new);
return answer;
}
}
import java.util.*;
class Solution {
public Integer[] solution(int[] p, int[] s) {
ArrayList<Integer> list = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for(int i=0; i<p.length; i++){
int nonPro = 100-p[i];
int day = (int)Math.ceil((100.0-p[i])/s[i]);
queue.add(day);
//System.out.println(day);
}
while(!queue.isEmpty()) {
int now = queue.poll();
int cnt = 1;
while(!queue.isEmpty() && queue.peek() <= now){
queue.poll();
cnt++;
}
list.add(cnt);
}
Integer[] answer = list.toArray(Integer[]::new);
return answer;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] p, int[] s) {
StringBuilder sb = new StringBuilder();
Queue<Integer> queue = new LinkedList<>();
for(int i=0; i<p.length; i++){
int nonPro = 100-p[i];
int day = 0;
if(nonPro%s[i]==0) day = nonPro/s[i];
else day = nonPro/s[i]+1;
queue.add(day);
}
int cnt = 1;
int memory = queue.poll();
while(!queue.isEmpty()){
int now = queue.poll();
if(memory>=now){
cnt++;
}
else{
sb.append(cnt);
cnt = 1;
memory = now;
}
if(queue.isEmpty()){
sb.append(cnt);
}
}
String str = sb.toString();
int[] answer = new int[str.length()];
for(int i=0; i<str.length(); i++){
answer[i] = str.charAt(i) - '0';
}
return answer;
}
}