알고리즘/Programmers

[Swift_Programmes] 두 개 뽑아서 더하기

YEN_ 2024. 1. 5. 09:46

프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/68644

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


💡 내가 제출한 풀이

import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var resultArr: [Int] = []

    for i in 0 ..< numbers.count {
       for j in i ..< numbers.count {
           if i != j {
               resultArr.append(numbers[j] + numbers[i])
           }
       } 
    }
    
    resultArr = Array(Set(resultArr)).sorted(by: <)
    
    return resultArr
}

💡 풀이 과정

 

서로 다른 인덱스에 있는 두 개의 숫자를 뽑아서 더한 배열을 반환하는 문제이다.

숫자를 더할 때 중복이 나오면 반환값에서는 중복을 제거한다.

 

두 개의 숫자를 고르는 건 반복문, 중복 제거는 집합Set 을 사용했다

 

 

💡 내 풀이 리팩토링

func solution(_ numbers: [Int]) -> [Int] {
    var resultArr: Set<Int> = Set()

    for i in 0..<numbers.count {
        for j in i+1..<numbers.count {
            resultArr.insert(numbers[i] + numbers[j])
        }
    }

    return resultArr.sorted()
}

 

sorted의 반환값이 배열이니 굳이 집합을 배열로 형변환 해 줄 필요가 없었다.

그러므로 resultArr도 처음부터 집합으로 설정해두어, 반복문을 진행할 때 부터 중복 없이 담는다.

 

for i in 0..<numbers.count {
    for j in i..<numbers.count {
        if i != j {
            resultArr.append(numbers[j] + numbers[i])
        }
    }
}

원래 풀이 코드는 i j가 서로 다른 인덱스인 경우에만 두 수를 더하여 resultArr에 추가한다.

 

for i in 0..<numbers.count {
    for j in (i + 1)..<numbers.count {
        resultSet.insert(numbers[i] + numbers[j])
    }
}

이 코드는 두 번째 반복문에서 j(i + 1)부터 시작하여 중복된 조합을 피한다.

중복을 방지할 수 있다.