Swift랑 친해지기/programmers 풀기

[프로그래머스] 두개 뽑아서 더하기 (Swift)

데브킹덕 2022. 6. 20. 23:04

https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

  • 두 개 뽑아서 더하기
문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한사항
  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예numbersresult
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

 

 

시행 착오 

1. numbers의 길이가 만약에 5라고 치면은 

0번째 인덱스 값은 첫번째,두번째,세번째,네번째까지 값을 더해야한다. 

1번째 인덱스 값은 두번째,세번째,네번째의 값과 더하면 된다.

반복하여 마지막 네번째 인덱스 값은 다섯번째 인덱스 값과 더한 뒤 오름 차순으로 정렬하여 리턴하면 된다. 

 

2. 따라서 배열을 먼저 만들었다. 

var result: Int[] = [] //배열생성

3. numbers.count를 이용하여 배열에 수를 확인하고

for Loop 안에 for Loop을 돌려 result 배열에 더한값을 추가하도록 하였다. 

 

4. 이후 sorted로 배열을 오름차순으로 정렬하면 된다고 생각했다. 

 

 

 

하지만 배열을 사용하면 문제가 발생한다. 

중복 요소를 허용하지 않기 때문에 Set을 사용하여야 한다. 

 

따라서 Set으로 변경하여야 한다. 

var result: Set<Int> = []

 

이 후 append가 아닌 insert를 이용하여 삽입하여야 한다. 

result.insert()

 

마지막으로 Set배열을 sorted를 이용하여 오름차순으로 정렬하고 리턴하여야 한다.

import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var result: Set<Int> = []
    for i in 0 ..< numbers.count{
        for j in i+1 ..< numbers.count {
            result.insert(numbers[i] + numbers[j])
        } 
    }
    
    return result.sorted()
}

 

배열에서도 if 문을 사용하여 중복을 피할 수 있음

 

import Foundation

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

    for i in 0 ..< numbers.count {
        for j in i + 1 ..< numbers.count {
            let num = numbers[i] + numbers[j]
            if !result.contains(num) {
                result.append(num)
            }
        }
    }
    return result.sorted()
}