제이슨의 개발이야기

프로그래머스 두개 뽑아서 더하기 월간 코드 챌린지 시즌1 본문

코딩테스트

프로그래머스 두개 뽑아서 더하기 월간 코드 챌린지 시즌1

제이쓰은 2021. 8. 4. 23:34
728x90
반응형

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

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr

 

안녕하세요! 오늘은 프로그래머스 에서 두 개 뽑아서 더하기 란 문제를 풀어봤습니다!

 

문제 설명

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


제한사항

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

입출력 예

 

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

 

이 문제를 보고 제가 처음으로 생각나는 것은 배열을 차례대로 다 더해보고 그것 을 저장하고 나서 sort 한 값을 return 하면 되지 않을까? 

란 생각이 들었습니다 그러나 하나씩 다 더해보면 중복이 발생하게 되면 중복된 값들은 하나만 저장해야 하는 문제가 있었습니다 

 

그 때 생각한 것이 hash map 은 중복을 허용하지 않기 때문에 hash map 을 이용해서 먼저 더하고 나서 그 map 의 key 들을 따 로 빼서 sort 하면 되지 않을까? 란 생각을 하게 됬습니다! 

 

class Solution {
    fun solution(numbers: IntArray): IntArray {
        var answer: IntArray = intArrayOf()

        var map = HashMap<Int , Int>()

        for(i in numbers.indices){

            for(j in i until numbers.size){
                if(i!=j){
                    var sum = numbers[i]+numbers[j]
                    map.put(sum,sum)
                }
            }
        }
        var index = 0
        answer = IntArray(map.size)
        for(i in map.keys){

            answer.set(index++,i)
        }

        answer.sort()

        return answer
    }
}

 

그러나 이런 방식은 그렇게 썩 좋은 방식이라고 할 순 없을거 같네요 ㅠㅠ 

 

저 보다 더 좋은 코드를 밑에 예시로 남겨 놓겠습니다!!

 

class Solution {
    fun solution(numbers: IntArray): IntArray {
        var answer: MutableList<Int> = mutableListOf()
        for( i in 0 until numbers.size-1){
            for( j in i+1 until numbers.size){
                answer.add(numbers[i] + numbers[j])
            }
        }
        answer = answer.sorted().distinct().toMutableList()
        return answer.toIntArray()
    }
}
728x90
반응형