- 수학적 사고가 코드를 간결하게 만든다. 수학을 공부해야 할 이유가 있는거다. . . 후.
Q )
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다.
첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때,
이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
[Java]
public int solution(int a, int d, boolean[] included) {
int answer = 0;
for (int i=0; i<included.length; i++) {
boolean flag = included[i];
if (i != 0) a += d;
if (flag) answer += a;
};
return answer;
}
for(int i = 0; i < included.length; i++){
if(included[i]){
answer += a + (d*i);
}
}
- 수학적 사고를 하자..
return IntStream.range(0, included.length).map(idx -> included[idx]?a+(idx*d):0).sum();
- 이놈의 스트림!
https://developer-rooney.tistory.com/132
[Python]
answer = 0
for i in range(len(included)):
answer += (a + d * i) * int(included[i])
return answer
- included 리스트의 길이만큼 반복합니다. i는 인덱스
- a + d * i는 등차수열의 i번째 항을 계산
- included[i]가 True라면 1, False라면 0
return sum(a + i * d for i, f in enumerate(included) if f)
리스트 컴프리헨션 및 enumerate:
- enumerate(included)는 included 리스트의 각 항목에 대해 인덱스 i와 값 f를 생성.
- if f는 included 리스트의 항목 f가 True일 때만 조건을 만족