티스토리 뷰
더보기
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
'코딩 테스트 [ 연습 ]' 카테고리의 다른 글
프로그래머스 - 입문 - 피자 나눠 먹기 3 (0) | 2022.12.14 |
---|---|
프로그래머스 - 입문 - 점의 위치 구하기 (0) | 2022.12.13 |
프로그래머스 - 입문 - 문자열 뒤집기 (0) | 2022.12.09 |
프로그래머스 - 입문 - 짝수 홀수 개수 (0) | 2022.12.07 |
프로그래머스 - 입문 - 배열 뒤집기 (0) | 2022.12.06 |
댓글