티스토리 뷰

 


 

 

 

더보기
import java.util.*;

class Solution {
    
    public int[] solution(int[] progresses, int[] speeds) {
        
        // + 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses
        // + 각 작업의 개발 속도가 적힌 정수 배열 speeds
        // + 각 배포마다 몇 개의 기능이 배포되는지를 return
        // + 단, 뒤의 기능이 앞의 기능보다 먼저 완성된 경우에는 앞이 완성되기 전까지 배포가 불가능하다.
        
        int [] endDay = new int [100];
        // + 작업의 개수는 100개 이하이기에 마감되는 날짜를 저장하는 배열도 최대 크기인 100으로 지정한다.
        
        // ==================================================
        // + 1. 배포되기까지 몇일이 남았는지 구하고, 
        // + 그 날짜에 몇가지의 기능이 완성되는지 구해라.
        // ==================================================
        
        int day = 1;
        // + endDay( 마감일 )까지 얼마나 남았는지 카운팅해주기 위한 변수 생성
        
        for ( int i = 0; i < progresses.length; i++ ){
            
            while ( progresses[i] + ( day * speeds[i] ) < 100 ) {
                
                // + progresses[i] + ( day * speeds[i] )로 판단해주는 이유는
                // + day에 앞의 기능이 완성되는 날짜가 저장되고 초기화가 되지 않음으로써
                // + 이렇게 할 경우, 앞의 기능보다 뒤의 기능이 먼저 완료될 경우에는 앞의 날짜에 맞게 카운팅 해준다.
                
                day ++;
                // + 완성이 될때까지 마감까지 남을 일 수를 더해준다.
                
            } // inner while
            
            endDay[day]++;
            // + 마감되는 날짜의 위치(endDay[day])에 맞게 기능이 이때 완성됨을 저장한다.
            // + 이때 같은 날에 동시에 복수의 기능이 마감될 수 있기에, 몇 가지의 기능이 마감되는지 알기 위해서 카운팅( ++ )해준다.
            
        } // for
        
        System.out.println(Arrays.toString(endDay));
        
        // ==================================================
        // + 2. 배포되는 날짜의 수를 카운팅해준다.
        // ==================================================
        
        int count = 0;
        // + 배포되는 날짜 카운팅해주는 변수 생성
        
        for ( int j : endDay ) {
            
            // + endDay라는 배열에서 실제 기능이 배포되지 않는 날의 경우에는 초기값인 0 그대로이기에,
            // + 0이 아닌 원소의 수만 카운팅해주면 된다.
            // + - > 배포가 되는 날짜에만 그 날짜에 완료되는 기능의 수가 카운팅 되어져 있다.
            
            if ( j != 0 ) {
                count ++;
            } // if
            
        } // enhanced for
        
        int [] answer = new int [ count ];
        // + 배포되는 날짜의 수만큼의 크기의 배열을 만들어 준다.
        
        // ==================================================
        // + 3. answer 배열에 몇가지의 기능이 배포될 예정인지 저장한다.
        // ==================================================
        
        count = 0;
        // + answer 배열에 원소를 저장하기 위해 사용되는 변수 count
        
        for ( int k : endDay ){
            
            // + endDay라는 배열에서 실제 기능이 배포되지 않는 날의 경우에는 초기값인 0 그대로이기에,
            // + 0이 아닌 원소의 값( 배포되는 기능의 수 )를 answer 배열에 저장하면 된다.
            
            // + answer 배열에 배포되는 기능의 수를 날짜에 맞게 차례대로 넣기 위해서 count 함수를 사용하였다.
            // + 먼저, endDay에서 0이 아닌, 값( 배포되는 기능의 수 )을 가진 원소를 if 조건문을 통해 걸렀고,
            // + 그 후 값을 answer 배열에 날짜대로 차례대로 저장하기 위해서
            // + answer 배열에 값을 저장한 후 ++를 하여 그 다음 인덱스 번호에 그 다음 값이 저장되도록 하였다. 
            
            if ( k != 0 ) {
                answer[count++] = k;
            } // if
            
        } // enhanced for
        
        return answer;
        
    } // solution
    
} // end class

 

 


 

[ 참고한 블로그 ]

 

https://techhan.github.io/algorithm/programmers-55/

 

[프로그래머스] 기능개발(JAVA)

Level 2

techhan.github.io

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항