어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
문제해석
absolutes는 정수들의 절댓값signs는 각 정수의 부호true는 양수, false는 음수signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.class Solution
{
fun solution(absolutes: IntArray, signs: BooleanArray): Int
{
var answer = 0
for (i in absolutes.indices)
{
if(signs[i]) answer += absolutes[i]
else answer -= absolutes[i]
}
return answer
}
}
for (i in absolutes.indices)
absolutes 배열의 유효한 인덱스를 모두 순회하는 반복문
배열의 유효한 인덱스 범위를 나타내는 IntRange 객체를 반환
예) 배열의 크기가 3면, 0..2 범위를 나타냄
👀 배열의
indices프로퍼티해당 배열의 유효한 인덱스 범위를
IntRange로 반환
if조건문
현재 인덱스 i의 signs 배열의 값에 따라 → absolutes배열의 값을 answer에 더하거나 빼는 역할
class Solution
{
fun solution(absolutes: IntArray, signs: BooleanArray) =
absolutes.foldIndexed(0)
{ idx, acc, num -> acc + if (signs[idx]) num else -num }
}
foldIndexed
배열의 각 요소를 누적 값과 함께 처리하는 함수
인덱스를 포함하여 요소들을 순회하면서 누적 작업을 수행
foldIndexed(0)
초기 값으로 0을 설정
{ idx, acc, num -> … }
람다 함수, 인덱스, 누적 값, 현재 요소를 인자로 받는다.
acc + if (signs[idx]) num else -num
acc: 현재까지의 누적 값signs[idx]: signs 배열에서 현재 인덱스(idx)에 해당하는 값을 가져옴num: absolutes 배열에서 현재 인덱스(idx)에 해당하는 값을 가져옴if (signs[idx]) num else -num: signs[idx]가 true이면 num을 더하고, false이면 num을 뺌