Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SerialDate 리펙터링
- 9장
- 2166번
- springboot
- 프로그래머스
- Dxerr.h
- 가장 긴 증가하는 부분 수열2
- 자바의 정석
- 2206번
- Adapater Pattern
- 클린코드
- 냄새와 휴리스틱
- BOJ
- java
- 1043번
- DxTrace
- 코딩테스트
- 2156번
- Spring
- Design Patterns
- 11758번
- programmers
- 10830번
- 1300번
- 17장
- 백준
- Design Pattern
- java의 정석
- 코딩 테스트
- 11286번
Archives
- Today
- Total
Don't give up!
[코딩테스트] 기능개발(프로그래머스) 본문
코딩테스트 연습 - 기능개발 | 프로그래머스 (programmers.co.kr)
문제해석
개발에 소요된 기간 계산은 {100-(작업진도)}/(개발속도) 로 계산할 수 있습니다.
먼저 개발된 기능은 순서상 앞에 있는 기능의 배포와 함께 이루어지므로 이전 기능의 개발 기간과 대소 비교를 통해 문제를 해결할 수 있다고 생각하였습니다.
풀이
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int max=-1;
int[] commits = new int[progresses.length];
int index=-1;
for(int i=0; i<progresses.length; i++){
int remain = 100 - progresses[i];
int days = remain/speeds[i];
if(remain%speeds[i]!=0) days += 1;
if(days > max){
max = days;
index++;
}
commits[index]++;
}
int[] answer = new int[index+1];
for(int i=0; i<index+1; i++){
answer[i] = commits[i];
}
return answer;
}
}
개발 기간 7.2일은 8일차에 배포가 되는 것이므로 나머지 연산 %의 값이 0이 아니라면 +1을 하는 방식으로 배포시기를 계산하였습니다.
이전 기능의 개발 기간 중 가장 큰 값을 max에 저장, 배포 순서대로 기능의 수를 배열에 저장한 후 배열의 크기를 줄이는 방식으로 코드를 구현하였습니다.
이 코드만으로도 테스트는 통과하였지만 java의 기능들을 활용한다면 코드를 줄일 수 있을 것이라고 생각하였습니다.
개선
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] commits = new int[100];
int max = -1;
for(int i=0; i<progresses.length; i++){
int days = (int)Math.ceil( (100 - progresses[i]) / (double)speeds[i] );
if(days > max) max = days;
commits[max]++;
}
return Arrays.stream(commits).filter(i -> i!=0).toArray();
}
}
Math.ceil 함수는 주어진 숫자를 반올림합니다.
반올림이 가능하므로 double 형식의 나눗셈 결과 -> 반올림된 int형 변수로 계산 결과를 반환하였습니다.
Stream의 filter는 조건에 부합하는 원소만을 선택하여 배열을 형성합니다.
값이 0이 아닌 원소들만을 보다 쉽게 얻어낼 수 있으므로 배열을 '날짜마다 배포된 기능 수'로서 저장할 수 있고 index와 같은 변수를 사용하지 않아도 구현할 수 있게 되었습니다.
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 더 맵게(java) (0) | 2021.05.01 |
---|---|
[프로그래머스] 괄호 변환(java) (0) | 2021.04.30 |
[프로그래머스] 다리를 지나는 트럭(java) (0) | 2021.04.29 |