[알고리즘] Swift 음양 더하기

이유진·2024년 3월 26일
1

알고리즘

목록 보기
26/32

문제 설명

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


제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예

absolutessignsresult
[4,7,12][true,false,true]9
[1,2,3][false,false,true]0

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

풀이 과정

  1. 배열 absolutes와 signs에서 같은 Index에 위치한 요소들을 합쳐준다! ‘zip’ 함수를 사용하면 된다.
  2. map을 사용해 합친 값을 하나의 배열로 만들어준다.
  3. reduce를 사용해 합친 배열에 있는 값들을 모두 더해준다!
  4. 이 때, 삼항 조건 연산자를 사용해 signs가($1)이 true일 경우 absolutes 요소($0) 그대로(양수로) 반환하고, false일 경우 - 를 붙여 음수로 반환한다.

같은 인덱스에 위치한 요소들을 매칭시키는 개념을 몰라서 서칭 후 풀이를 진행했다!
서칭 후 알게 된 개념 간단히 정리 :>

zip
전역 함수. 두 개의 시퀀스(배열이나 다른 컬렉션)를 인자로 받아 두 시퀀스의 같은 인덱스 요소들을 쌍으로 묶어주는 역할을 한다. 배열, 딕셔너리, 세트 등 다양한 시퀀스 타입에서 사용 가능하다!


Solution

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    return zip(absolutes, signs).map { $1 ? $0 : -$0 }.reduce(0, +)
}

2개의 댓글

comment-user-thumbnail
2024년 3월 26일

우와 풀이 정말 간단하게 잘 담아내셨네요 !! 저는 map이랑 친해지고 싶어도 친해지지 못했는데 대단하십니다👏🏻

1개의 답글