JAVA/Argorithm Test

# Level1 - 두개 뽑아서 더하기

skysoo1111 2020. 10. 29. 14:01

[문제]

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

 

 

[내 풀이]

내 풀이의 문제점 하나, 왜 list를 썼지?

list를 썼기때문에 중복 검사를 하는 과정을 거쳐야 했다.

 

문제점 둘, 왜 list의 stream 을 활용하지 않았나?

stream의 mapToInt()라는 함수를 생각도 못했다...

mapToInt()를 사용하면 Integer를 int로 형 변환하거나 list의 값을 Array로 옮기기 위해 또 for문을 돌리는 작업을 하지 않아도 된다.

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        int cnt = 0;
        List<Integer> list = new ArrayList<>();

        for (int before=0;before<numbers.length;before++){
            for (int after=before+1;after<numbers.length;after++){
                int addValue = numbers[before] + numbers[after];

                if (!list.contains(addValue))
                    list.add(addValue);
            }
        }

        list.sort(Comparator.naturalOrder());
        answer = new int[list.size()];
        for (int value : list){
            answer[cnt] = value;
            cnt++;
        }

        return answer;
    }
}

 

[다른 사람 풀이 참고]

import java.util.*;

public class Solution {
    public int[] solution(int[] numbers){
        Set<Integer> set = new HashSet<>();

        for (int before : numbers){
            for (int after=before+1;after<numbers.length;after++){
                set.add(numbers[before] + numbers[after]);
            }
        }

        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

 

<문제 출처>

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

 

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

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

programmers.co.kr

 

'JAVA > Argorithm Test' 카테고리의 다른 글

# Level1 - 모의고사 (완전탐색)  (0) 2020.10.30
# Level1 - 예산  (0) 2020.10.30
# Level1 - [1차] 비밀지도  (0) 2020.10.28
# Level1 - 크레인 인형 뽑기  (0) 2020.10.27
자바 알고리즘 #Level1 약수의 합  (0) 2016.07.12