[Java] 배열에 동적으로 길이 늘려서 원소 추가하기
yeoseon opened this issue · 1 comments
yeoseon commented
알고리즘을 풀다가.. (https://github.com/yeoseon/algorithm/blob/master/src/MockExam.java)
결과를 배열로 뱉어줘야 하는데 해당 결과 배열의 Size를 정해두지 않고 원소를 추가/삭제 하고 싶은데 어떻게 할까?
(Collection을 이용해서 배열에 하나씩 넣어주는 방식으로 사용한 방식은 안좋아보이지만 일단 그냥 넘기자..)
result
의 길이를 3으로 정해버렸기에, {1, 0, 0} 과 같이 결과가 도출되어 에러가 났다. (원래 답: {1})
private int[] getMaxCount(int count1, int count2, int count3) {
int[] countResult = {count1, count2, count3};
int[] result = new int[3];
List<Integer> tempResult = new ArrayList<>();
int maxCount = countResult[0];
for(int i = 0; i < countResult.length; i++) {
if(maxCount < countResult[i]) {
maxCount = countResult[i];
}
}
for(int i = 0; i < countResult.length; i++) {
if(countResult[i] == maxCount) {
tempResult.add(i + 1);
}
}
int size = 0;
for(int temp : tempResult) {
result[size] = temp;
size++;
}
return result;
}
yeoseon commented
나는 이렇게..
temporary 배열과 System.copyArray
를 이용해 해결했다..
풀이(getMaxCount 메소드) 참고
더 단순한 방법이 있었음..
Sample 코드 참고
Collection으로 처리 후에, 배열을 int[] res = new int[list.size()];
다음과 같이 Collection의 Size만큼 크기로 만들어서 그냥 넣어주기만 하면 되었던 것. .. ㅎㅎ
Java 8의 Stream API를 이용한다.
- 다만 시간이 좀 더 걸린다고 한다.
Sample 코드 참고
ArrayList<Integer> list = new ArrayList<>();
if(maxScore == score[0]) {list.add(1);}
if(maxScore == score[1]) {list.add(2);}
if(maxScore == score[2]) {list.add(3);}
return list.stream().mapToInt(i->i.intValue()).toArray();