2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 없는 숫자 더하기

2024. 3. 7. 10:54ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

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

programmers.co.kr

* 없는 숫자 더하기 *

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. 

numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

* 제한사항 *

1 ≤ numbers의 길이 ≤ 9

0 ≤ numbers의 모든 원소 ≤ 9

numbers의 모든 원소는 서로 다릅니다.

* 알고리즘 분석과 이해 *

이 알고리즘은 0부터 9까지의 숫자 중 일부가 들어있는 배열이 주어졌을 때,

주어진 배열에 없는 숫자들을 모두 찾아 더하는 알고리즘 이네요.

* 로직구상 *

우선 "Set"을 활용하여 주어진 배열에서 중복을 제거하고,

Set의 contains 메소드를 사용해서 특정 숫자가 있는지 확인해 보아야겠고

0부터 9까지의 숫자를 순회하면서 각 숫자가 주어진 배열에 있는지 확인해야하니까

for-in 반복문을 사용해야겠죠?!

그리고

주어진 배열에 없는 숫자를 찾을 때마다

그 숫자를 변수에 더해주어야 하니까

+= 연산자도 필요할 것 같습니다.

0부터 9까지의 숫자를 포함하는 배열을 만들기 위해

배열도 초기화를 해줘야 겠죠?!

 

즉, 0부터 9까지의 숫자를 모두 포함하는 배열을 만들고, 입력된 배열에서  숫자가 있는지 확인하고

 후에, 주어진 배열에 없는 숫자들을 모두 더하여 반환해주는 것이죠.

 

이제 코드구성으로 넘어가 봅시다.

* 코드구성 *

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

solution 함수를 정의해주는데, 정수 배열을 입력으로 받아서 정수를 반환해주도록 해줍시다.

입력 매개변수로 이름을 생략하고 배열만 전달할 수 있게 "_ numbers"로 만들어줍니다.

let fullSet = Set(0...9)

모든 가능한 숫자가 있는 집합을 만들어 두고,

입력 배열에서 누락된 숫자를 찾기 위해서

0부터 9까지의 숫자를 포함하는 "fullSet"을 생성하고

Set을 사용하여 중복을 제거합니다.

let givenSet = Set(numbers)

입력 배열에서 각 숫자를 빠르게 찾기 위해서

입력으로 받은 배열 "numbers"를 "Set"으로 변환하여

중복을 제거한 "givenSet"을 만듭니다.

var missingSum = 0

나중에 주어진 배열에 없는 숫자들의 합을 계산할 때 사용하기 위해서

주어진 배열에 없는 숫자들을 모두 더할 변수 missingSum을 초기화 해줍니다.

for num in fullSet {

모든 가능한 숫자를 확인하면서,

입력 배열에 없는 숫자를 찾기 위해서

0부터 9까지의 숫자를 순회하는 반복문을 시작해주도록 합시다.

if !givenSet.contains(num) {

현재 숫자가 "givenSet"에 포함되어 있지 않은지 확인해줍니다.

즉, 입력 배열에 없는 숫자인지를 판단합니다. 

! 연산자를 사용하여 "contains" 메소드의 결과를 부정해주어야겠죠?!

	missingSum += num
  }
}

주어진 배열에 없는 숫자들의 합을 구하기 위해서

입력 배열에 없는 숫자인 경우, 그 숫자를 "missingSum"에 더해 줍시다.

return missingSum
}

주어진 배열에 없는 숫자들의 총합 "missingSum"을 반환하고 마무리 해줍니다.

 

전체 코드는 아래와 같아요

func solution(_ numbers: [Int]) -> Int {
    // 0부터 9까지의 숫자를 모두 포함하는 배열 생성
    let fullSet = Set(0...9)
    // 주어진 배열을 Set으로 변환하여 중복 제거
    let givenSet = Set(numbers)
    // 주어진 배열에 없는 숫자들을 모두 더하는 변수 초기화
    var missingSum = 0
    
    // 0부터 9까지의 숫자들을 순회하면서
    for num in fullSet {
        // 주어진 배열에 해당 숫자가 없으면
        if !givenSet.contains(num) {
            // 더함
            missingSum += num
        }
    }
    
    // 주어진 배열에 없는 숫자들의 총합 반환
    return missingSum
}

// 테스트
print(solution([1, 2, 3, 4, 6, 7, 8, 9])) // 45 (0 + 5)
728x90