음양 더하기

Anna·2024년 7월 1일

코딩테스트

목록 보기
23/28
post-thumbnail

📖 문제

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

문제해석

  • 첫 번째 배열 absolutes는 정수들의 절댓값
  • 두 번째 배열 signs는 각 정수의 부호
    • true는 양수, false는 음수
  • 이 두 배열을 사용해서 실제 정수들을 구한 후, 이 정수들의 합을 구해기

📖 제한 조건

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • 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을 뺌

0개의 댓글