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)
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 가운데 글자 가져오기 (0) | 2024.03.11 |
---|---|
[Swift] Programmers - 제일 작은 수 제거하기 (0) | 2024.03.08 |
[Swift] Programmers - 핸드폰 번호 가리기 (0) | 2024.03.06 |
[Swift]Programmers - 음양 더하기 (2) | 2024.03.05 |
[Swift]Programmers - 나누어 떨어지는 숫자 배열 (0) | 2024.03.04 |