[프로그래머스] 없는 숫자 더하기

neoneoneo·2024년 2월 27일
0

kotlin

목록 보기
10/49

문제

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

나의 풀이

class Solution {
    fun solution(numbers: IntArray): Int {
        var answer: Int = 0
        var numberArray = mutableListOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
        numbers.forEach {
            for (i in 0..9) {
                if(it == i) {
                    numberArray.remove(i)
                }
            }
        }
        answer = numberArray.sum()    
        return answer
    }
}

고수의 풀이_1

class Solution {
    fun solution(numbers: IntArray): Int  = 45 - numbers.sum()
}

고수의 풀이_2

class Solution {
    fun solution(numbers: IntArray): Int = (0..9).filterNot(numbers::contains).sum()
}

배운점

  • 사실 이 문제는 0~9 사이의 숫자를 더해서 있는 숫자들의 합만 빼면 되는 문제였다. 고수의 풀이도 보면 그렇게 되어있는데, 처음에 이 접근을 할까 하다가 만약 숫자의 범위가 늘어난다면? 그 숫자의 범위가 항상 동적으로 변한다면? 이런 생각이 들었다. 다만, 나의 풀이도 그 해답을 찾아주기는 어렵다. 나는 아예 0~9 을 사이의 숫자를 하드코딩 해놨기 때문이다. 이를 보다 쉽게 해결하려면 고수의 풀이_2를 보면 될 것 같다.
    • 애초에 리턴 값에 처리를 해놓은 방식이다.
    • (0..9) : 0~9 사이의 값 중에서
    • .filterNot() : 필터에 해당하는 값이 아닌 것만
    • .sum() : 합한다.
  • Int = (0..9)의 활용
    • 0~9 숫자 범위를 생성한다.
  • filterNot()의 활용
    • ()에서 배열에 해당하지 않는 값들을 골라낸다.
  • ::의 활용
    • 멤버 참조 연산자로, 특정 멤버(함수, 속성 등)나 생성자를 가리킬 때 사용된다. filter() 안에서 조건을 지정할 때 사용할 수 있을 것 같다.
  • contatins의 활용
    • 주어진 값이 배열에 포함되어 있는지 확인한다.
  • 다시 정리하자만, (0..9).filterNot(numbers::contains)는 numbers 안에 0~9 사이의 값이 포함되어 있는지(contains) 판단 후 그 외의 값만(filterNot) 산출하는 역할을 한다고 볼 수 있겠다.

[TIL-240227]

0개의 댓글