import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
AtomicInteger index = new AtomicInteger();
return Arrays.stream(absolutes).reduce(0, (i, i1) -> {
index.getAndIncrement();
return signs[index.get() - 1] ? i + i1 : i - i1;
});
}
}
음양더하기 문제에서 다른 사람들이 풀어 놓은 것을 보았는데 그 중 눈에 띄는 답을 보았다.
AtomicInteger와 Stream의 reduce() 함수를 이용해서 문제를 풀이했는데
참고로 나의 코드는
for(int i=0;i<absolutes.length;i++){
if(signs[i] == false){
absolutes[i] = -absolutes[i];
}
answer += absolutes[i];
}
이러하였다. stream을 이용해서 풀려고 하였는데 아직 능숙하지 않아 생각나지 않았다.
먼저 Arrays.Stream(absolutes).reduce()는 초기값을 0으로 설정한뒤 i와 i1을 설정해 주는데 i는 reduce의 현재 람다 함수를 통해 축적된 값이고, i1은 배열의 그 index의 들어있는 value이다.
이를 통해서 i의 값을 축적하면서 i1로 값을 빼거나 더함을 알 수 있다.
🔘 AtomicInteger index = new AtomicInteger();
🔘 index.get()
🔘 원자적 연산 :
index.getAndIncrement() : 현재 값을 가져온 후 1을 증가시킨다.
index.getAndDecrement() : 현재 값을 가져온 후 1을 감소시킨다.
index.incrementAndGet() : 1을 증가시킨 후 값을 반환한다.
index.decrementAndGet() : 1을 감소시킨 후 값을 반환한다.
🔘 값 변경 및 조작 :
🔘 기타 메소드 :