문제 설명
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ a ≤ 100
1 ≤ d ≤ 100
1 ≤ included의 길이 ≤ 100
included에는 true가 적어도 하나 존재합니다.
입출력 예
a d included result
3 4 [true, false, false, true, true] 37
7 1 [false, false, false, true, false, false, false] 10
import java.util.stream.IntStream;
class Solution {
public int solution(int a, int d, boolean[] included) {
int answer = 0;
int[] arr1 = new int[included.length];
for(int i=0; i<included.length; i++) {
arr1[i] = a + d * i;
}
answer = IntStream.range(0, included.length)
.filter(i -> included[i])
.map(i -> arr1[i])
.sum();
return answer;
}
}
나는 이렇게 풀었다.
import java.util.stream.IntStream;
class Solution {
public int solution(int a, int d, boolean[] included) {
return IntStream.range(0, included.length).map(idx -> included[idx]?a+(idx*d):0).sum();
}
}
남의 풀이를 보니 로직은 크게 차이가 없는데
내가 필요 없는 배열을 하나 더 만든 것 같다.
그냥 해당하는 숫자만 더하면 끝인데.
나의 군더더기는 이 코드에서 더 드러나는 것 같다.
class Solution {
public int solution(int a, int d, boolean[] included) {
int answer = 0;
for(int i = 0; i < included.length; i++){
if(included[i]){
answer += a + (d*i);
}
}
return answer;
}
}