본문 바로가기
Coding Test

Programmers.없는 숫자 더하기 (Swift)

by iOS_woo 2022. 3. 28.

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

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

 

코딩테스트 연습 - 없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

programmers.co.kr

 

나의 문제 풀이

import Foundation

func solution(_ numbers:[Int]) -> Int {
    let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    let numbers2 = numbers1.filter { !numbers.contains($0) } 
    let answer = numbers2.reduce(0) { $0 + $1 }
    
    return answer
}

// filter{} 
// 값을 추출하는 고차 함수

// contains()
// 두 어레이의 값을 비교할 수 있는 함수

// reduce()
// 컨테이너의 내부의 요소들을 하나로 합치는 기능을 하는 고차 함수

 

다른 사람의 풀이

import Foundation

func solution(_ numbers: [Int]) -> Int {
    return (0...9).filter { !numbers.contains($0) }.reduce(0, +)
}

-

import Foundation

func solution(_ numbers:[Int]) -> Int {
    return 45-numbers.reduce(0, +)
}

 

소감

비교적 어렵지 않게 풀 수 있었다. 
함수들 사용이 아직 익숙하지 않아서 문법 검색을 통해 해결했다. 

 

다른 사람의 코드를 보면서 저런 식으로도 최적화할 수 있구나 배우게 되었고,

reduce(0, +) 코드를 배울 수 있었다.

 

45에서 숫자의 합을 빼는 것을 보고 나도 접근을 다양하게 하면 좋겠다는 생각을 해본다!

 

참고: 

 

https://woongsios.tistory.com/35

 

Swift) 배열의 중복체크

두 배열에서 공통된 원소가 있는지, 확인하려면 어떻게 해야할까? 또 중복되는 원소를 제거하려면 어떻게 해야할까? 저같은 초보는 간단해보이는 이 질문의 답을 swift 에서 하기가 참 어려웠습

woongsios.tistory.com

https://minosaekki.tistory.com/21

 

Swift - map,filter,reduce(고차함수)란 무엇일까?

저번 시간에 정리하였던 클로저에 이어서 이번에는 고차함수에 대해 정리해보도록 하겠습니다! 요즘 알고리즘 문제들을 풀고 있는데 문제를 풀다 보면 고차함수를 유용하게 사용할 때가 많아

minosaekki.tistory.com

 

댓글