알고리즘 | 음양 더하기

일어나 개발해야지·2024년 2월 27일

알고리즘

목록 보기
10/12

문제 설명

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

제한사항

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

논리구성

    1.absolutes와 signs의 요소를 매칭한다.(튜플 사용)
    2.절대값이 담긴 하나의 array로 만든다
    3.reduce를 사용해서 요소의 값을 더한다.
 let (device, number, size) = (“iPhone”, 12,“mini”)

풀이1


      func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
        
        var matchedTuples: [(Int, Bool)] = []
     
        //1.absolutes와 signs의 요소를 매칭한다.
        for i in 0..<min(absolutes.count, signs.count) {
            let tuple = (absolutes[i], signs[i])
            matchedTuples.append(tuple)
        }

        //2.절대값이 담긴 하나의 array로 만든다
        let absoluteValues = matchedTuples.map { $1 ? $0 : -$0}
        
        //3.reduce를 사용해서 요소의 값을 더한다.
        let sumValue = absoluteValues.reduce(0){ $0 + $1}

        return sumValue
    }
    

풀이2

      
    func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
        
        var matchedTuples: [(Int, Bool)] = []
     
        //1.absolutes와 signs의 요소를 매칭한다.
        for i in 0..<min(absolutes.count, signs.count) {
            let tuple = (absolutes[i], signs[i])
            matchedTuples.append(tuple)
        }

        //2.절대값이 담긴 array를 만들고, 배열의 모든 요소의 값을 더한다
        let sumAbsoluteValues = matchedTuples.map { $1 ? $0 : -$0}.reduce(0){ $0 + $1}
        

        return sumAbsoluteValues
    } 

풀이 3

        func solution(_ absolutes: [Int], _ signs: [Bool]) -> Int {
        // 1. absolutes와 signs의 요소를 매칭하여 튜플 배열 생성
        let matchedTuples = zip(absolutes, signs)
        
        // 2. 절대값이 담긴 array를 만들고, 배열의 모든 요소의 값을 더한다
        let sumAbsoluteValues = matchedTuples.map { $1 ? $0 : -$0 }.reduce(0, +)
        
        return sumAbsoluteValues
    }

0개의 댓글