프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/68644
💡 내가 제출한 풀이
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)부터 시작하여 중복된 조합을 피한다.
중복을 방지할 수 있다.
'알고리즘 > Programmers' 카테고리의 다른 글
[Swift_Programmes] K번째수 (0) | 2024.01.04 |
---|---|
[Swift_Programmes] 문자열 내 마음대로 정렬하기 (0) | 2024.01.03 |
[Swift_Programmes] 숫자문자열과 영단어 (1) | 2023.12.28 |
[Swift_Programmes] 최소직사각형 (1) | 2023.12.27 |
[Swift_Programmes] 크기가 작은 부분 문자열 (0) | 2023.12.26 |