코딩테스트 연습 - 기능개발 | 프로그래머스
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇
programmers.co.kr
코드를 줄이고 싶어서 많은 시간을 썼지만 줄이지 못했습니다.
요소의 개수가 불분명 하므로 Arraylist를 사용해 각 작업마다 걸리는 기간을 삽입해주었습니다.
기준기간을 지나야만 작업이 완료된 것이므로 올림(ceil)을 해주었고
기준을 정해주어 뒤에 요소들과 비교하면서 배포할때 몇 개의 작업이 배포되는지를 세어주었습니다.
마지막으로 Arraylist를 int배열로 바꿔주는 작업을 하였습니다.
import java.util.*; | |
class Solution { | |
public int[] solution(int[] progresses, int[] speeds) { | |
ArrayList<Integer> period = new ArrayList<>(); // 각 작업마다 걸리는 기간 | |
ArrayList<Integer> result = new ArrayList<>(); // 결과 값 | |
for(int i=0; i<speeds.length; i++){ | |
double restProgress = 100-progresses[i]; | |
period.add((int)(Math.ceil(restProgress/speeds[i]))); //각 작업에 대한 배포가능한 날짜 | |
// [7, 3, 9] | |
} | |
int criteria = period.get(0); // 첫 번째 작업을 기준으로 저장 | |
int count = 1; | |
for(int i=1; i<speeds.length;i++){ // 기준에 대해 비교를 합니다. | |
if (criteria < period.get(i) ) { // 기준값보다 이후 값이 더 크면 | |
result.add(count); // 결과값에다 넣어주고 | |
count=1; // 기능 수를 초기화 시켜주고 | |
criteria = period.get(i); // 기준값을 바꾸어 줍니다. | |
} else { // 아닐경우 | |
count++; // 배포되는 기능수를 1더해줍니다. | |
} | |
} | |
result.add(count); | |
// 답안 제출을 위한 변환과정 | |
int []answer = new int[result.size()]; | |
for(int i=0; i<answer.length; i++) | |
answer[i] = result.get(i); | |
return answer; | |
} | |
} |
다른분들이 올린 더 짧은 풀이를 보았는데 저랑 푸는 방식이 달랐습니다.
작업진도(<100)와 작업속도(<=100)제한이 있으므로 아무리 배포가 늦어져도 99일 이내에는 개발이 되기 때문에
int []dayOfend 로 끝나는 날을 변수로 만들어서 ( int는 default값이 0입니다.)
각각의 작업에 대해 날짜(day)를 하루하루 더해줘서 작업기간에 해당하는 값을 dayOfend의 인덱스로 사용해서 값을 올려주었습니다.
그리고 마지막 변환과정도 stream으로
Arrays.stream(dayOfend).filter(i -> i!=0).toArray() 한 줄로 변환 할 수 있었습니다.
'Algorithm' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 Level2 - 다리를 지나는 트럭 [ Java ] (0) | 2020.01.18 |
---|---|
프로그래머스 코딩테스트 연습 Level2 - 멀쩡한 사각형 [ Java ] (0) | 2020.01.17 |
백준 1541번 잃어버린 괄호 [ Java ] (0) | 2020.01.13 |
백준 11399번 ATM [ Java ] (0) | 2020.01.13 |
백준 1931번 회의실배정 [ Java ] (0) | 2020.01.12 |