본문 바로가기
PS/프로그래머스

[프로그래머스 *Java] - 기능개발

by Jman 2022. 7. 5.

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

조건

제한 시간 45분

45분 이내에 풀지 못했다.
30분 전에 일단 문제를 풀긴 했지만, 계속해서 '맞왜틀 ' 루프에 빠져서 시간만 까먹다가 끝났다...
로직 설계를 잘했는데, 문제를 꼼꼼하게 읽지 않아, 로직 빈틈이 생겼었다.

기능이 앞에 있는 기능보다 먼저 개발될 수 있을 때, 기능 앞에 있는 기능 배포될 때 함께 배포된다는 이 말을
무조건 뒤에 있는 작업 수행 시간(초)를 비교를 해줘서 틀렸다...

ex)
각 작업 수행하기 위한 시간이 아래와 같을 때

[맞는 로직]
7 3 4 9 일 시, idx 2에 있는 수행시간 4초 걸린 작업일 경우, 이렇게 비교를 해줘야했는데
7, 3, 4 (3)
9 (1)
['맞왜틀' 로직]
7 3 4 9 일 시, 전에 있는 수행시간과 비교를 해줘서 계속 틀렸다...
7, 3 (2)
4(1)
9(1)

맞는 로직
맞왜틀 로직

 

 

/*
	제한시간 : 45분

*/
import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> workingDays = new LinkedList<>();
        
        // 작업 진도 각 프로세스 에 맞게 
        for (int i = 0; i < progresses.length; i++) {
            int percent = progresses[i];
            int days = 0;
            while(100 > percent) {
                percent += speeds[i];
                days++;
            }
            workingDays.add(days);
        }
        
        
        ArrayList<Integer> list = new ArrayList<>();
        int pre = 100;
        int count = 0;
        while(!workingDays.isEmpty()) {
            int tmp = workingDays.poll(); 
            if(pre >= tmp) {
                count++;
            }else {
                list.add(count);
                count = 1;    
            }
            
            pre = tmp;
            
            if(workingDays.isEmpty()) {
                break;
            }
        }
        
        list.add(count);
        int[] answer = new int[list.size()];
        int idx = 0;
        for (int i : list) {
            answer[idx++] = i;
        }

        return answer;
    }
}