[lv.2] 기능개발

RTUnu12·2024년 2월 19일
0

Programmers

목록 보기
7/41

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;
    }
}
  • 코드 2 (간소화)
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;
    }
}
profile
이제 나도 현실에 부딪힐 것이다.

0개의 댓글