알고리즘 CODEKATA 49 (두개 뽑아서 더하기)

오리너구리·2024년 6월 27일
0

CODEKATA

목록 보기
48/57
post-thumbnail

문제 설명

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


제한사항

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

내 풀이

최종 코드

class Solution {
    fun solution(numbers: IntArray): IntArray{
        var answer = intArrayOf()
        var numberSet = mutableSetOf<Int>()
        
        for(i in 0 ..numbers.size-1){
            for(j in 0.. numbers.size-1){
                if(i!=j){
                    numberSet.add(numbers[i]+numbers[j])
                }
            }
        }
        
        answer = numberSet.sorted().toIntArray()
    
        return answer
    }
}

풀이과정

오늘도 아주 간단했다 제공된 정수 배열에서 서로 다른 인덱스의 값을 더해서 나올 수 있는 경우의 수를 다 적으면 되는 문제!

걍 반복문으로 값들 더해주는데, 중복이 없어야되니깐 Set만들어서 알아서 중복 없애게 하면 간단~!


다른 사람 풀이

class Solution {
    fun solution(numbers: IntArray): IntArray {
        val list = numbers.toList()
        return list.withIndex().flatMap { i -> list.withIndex().map { j -> i to j } }
            .filter { it.first.index != it.second.index }
            .map { it.first.value + it.second.value }
            .toSortedSet()
            .toIntArray()
    }
}

람다식으로 되어있는데다가… flatMap 까지 있어서 너무어려움!!!

흠..근데 아무튼 filter로 첫번째 인덱스랑 두번째 인덱스가 다른 애들만 걸러서 걔네의 값을 더한걸 새로운 컬렉션으로 만들어준다음에, toSortedSet()을 사용해서 중복을 제거해주면서 정렬해준 듯

class Solution {
    fun solution(numbers: IntArray): IntArray {
        val answers: MutableList<Int> = arrayListOf()
        var sum: Int
        var i = 0
        var j = 0

        while (i < numbers.size - 1) {
            j = i + 1
            while (j < numbers.size) {
                sum = numbers[i] + numbers[j]
                answers.add(sum)
                j++
            }

            i++
        }

        answers.sort()
        return answers.distinct().toIntArray()
    }
}

흠 일단 비슷한데 중복제거를 Set으로 안하고 distinct()라는 함수를 씀

distinct라는걸 처음 봐서 검색해봤는데 배열이나 리스트에서 중복된 값을 제거해주는 것 같음!

profile
오리너구리입니다

0개의 댓글