기능개발(java)
문제설명
생각하기
- ArrayList를 이용해 return값을 저장하기
- 반복문과 조건문을 적절히 사용하기
내 풀이
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int cnt =0; // 현재 작업중인 위치
ArrayList<Integer> list = new ArrayList<>();
while(cnt !=progresses.length){
if(progresses[cnt] <= 99){
for(int i =cnt; i<progresses.length; i++){
progresses[i] += speeds[i];
}
}
if( progresses[cnt] >= 100){
int res =0; // 배포되는 개수
while(progresses[cnt] >= 100){
cnt++;
res++;
if(cnt ==progresses.length) break;
}
list.add(res);
}
}
int[] ans = new int[list.size()];
int num =0;
for(Integer i : list) ans[num++] = i;
return ans;
}
}
두번째 while문을 빠져나가는 break 조건을 잘못설정해서 outofbound메모리오류가 1시간동안 났다..
문제가 풀리지 않을 땐 내 코드를 차분히 다시 읽어보자.
ArrayList를 int[]로 바꾸는 코드를 한줄로 쓸 수 있다.
int[] ans = new int[list.size()];
int num =0;
for(Integer i : list) ans[num++] = i;
int[] ans = {};
ans = list.stream().mapToInt(i->i).toArray();
코드는 간결해 졌지만 속도면에서 느려지기 때문에 for문을 사용한 변환이 더 효율적이다.
Author And Source
이 문제에 관하여(기능개발(java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juntree/기능개발java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)