코테/프로그래머스

[프로그래머스/Lv. 2] 기능개발

imname1am 2023. 2. 23. 11:57
반응형

내 코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        List<Integer> answer = new ArrayList<>();
        List<Integer> list = new ArrayList<>();    
        
        for (int i = 0; i < progresses.length; i++) {
            int used =  (100 - progresses[i]) / speeds[i];
            if((100 - progresses[i]) % speeds[i] != 0) {
                used++;
            }
            
            list.add(used);
            System.out.println(used);
        }
        
        int p = list.get(0);
        int x = 0;
        for (int j = 0; j < list.size(); j++) {
            if (list.get(j) > p) {
                answer.add(x);
                p = list.get(j);
                x = 1;
            } else {
                x++;
            }
        }
        answer.add(x);
        
        // List -> int[]
        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }
        return result;
    }
}

배열로 푸는 방법이었다고 한다..

 

큐로 어떻게 푸나 다른 풀이도 찾아봤다...

 

[ 프로그래머스 - Java ] 기능개발 ( 자바 )

( 스택/큐 / 기능개발 ) [문제] 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르

yline.tistory.com

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        
        // 남은 작업일 수 저장
        Queue<Integer> q = new LinkedList();
        
        for(int i=0 ; i < speeds.length ; i++) {
            // 남은 작업일 계산해 큐에 추가
            q.offer((100 - progresses[i]) / speeds[i] +
                   ((100 - progresses[i]) % speeds[i] == 0 ? 0 : 1));
        }
        
        
        int cnt = 1;
        int now = q.poll();         // 첫 번째 항목 추출
        ArrayList<Integer> arr = new ArrayList<>();
        
        while(!q.isEmpty()) {
            int next = q.poll();    
                    
            if(now >= next) cnt++;  // 현재 작업일이 더 많은 경우
            else {
                arr.add(cnt);
                now = next;         // 현재 작업일을 next로 교체
                cnt = 1;
            }
        }
        arr.add(cnt);               // 마지막 cnt 따로 추가
        
        return arr.stream().mapToInt(i->i).toArray();
    }
}

q.offer() : 데이터 입력

q.poll()   : 첫 번째 데이터 추출


 

[프로그래머스] 기능개발 - Java, 자바

레벨 2https://programmers.co.kr/learn/courses/30/lessons/42586스택/큐 유형에 속한 문제지만 그 유형으로 해결할 방법이 떠오르지 않아 배열로 문제를 해결했다. 문제 풀이 순서1\. 작업일 수 배열(works)을 구

velog.io

 

[프로그래머스] 기능개발 (Java 자바)

문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이

tmdrl5779.tistory.com

으악 문제부터 풀이까지 이해하는 데 시간이 꽤 걸렸다ㅠ

 


(참고)

 - 큐 클래스 사용법 (q.peek(), q.poll() 등)

 

[Java] Queue 자료형

Queue 란? Queue는 선입선출(FIFO, First In First Out)방식의 자료형입니다. 먼저 입력되는 데이터가 먼저 나가는 구조로 되어있습니다. 일반적인 줄서기와 동일하다고 보시면 됩니다. Queue 종류 // 기본

www.oofbird.me

 

[Java] 자바 Queue 클래스 사용법 & 예제 총정리

Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를

coding-factory.tistory.com

 

반응형