CodeWars 일흔 아홉 번째 문제
Updated:
Sum consecutives
public static List<Integer> sumConsecutives(List<Integer> s) {
List<Integer> sumList = new ArrayList<Integer>(s);
int sum = 0;
int index = 0;
for(int i = 1 ; i < sumList.size() ; i++) {
if(sumList.get(i-1) == sumList.get(i)) {
sum += sumList.get(i);
sumList.remove(i);
i--;
} else {
sumList.set(index, sumList.get(index) + sum);
sum = 0;
index = i;
}
}
return sumList;
}
- Best 코드는 ListList의 pollLast 메소드를 사용했다.
- pollLast()는 해당 list의 맨 마지막 node의 값을 제거하고 그 값을 return하는 메소드이다.
- stack의 pop이라고 보면 될 것 같다.
- 그런데 나는 단순 List의 메소드를 이용하기 위해서 위와 같이 같은 값이 나오면 처음 나왔던 위치에 계속해서 더해주며 검색한 node를 삭제하는 방식으로 코드를 작성했다.
public static List<Integer> sumConsecutives(List<Integer> s) {
int previous = Integer.MAX_VALUE;
LinkedList<Integer> l = new LinkedList<>();
for (Integer v: s){
l.add(v == previous? l.pollLast() + v : v);
previous = v;
}
return l;
}
- 아래는 best 코드를 보고 pollLast 느낌이 나도록 작성해봤는데 처음 내가 작성했던 코드보다 보기 좋은 것 같다.
public static List<Integer> sumConsecutives(List<Integer> s) {
List<Integer> sumList = new ArrayList<Integer>();
int previous = Integer.MAX_VALUE;
for(int i = 0 ; i < s.size(); i++) {
if(s.get(i) == previous) {
sumList.set(sumList.size()-1, sumList.get(sumList.size()-1) + s.get(i));
} else {
sumList.add(s.get(i));
previous = s.get(i);
}
}
return sumList;
}