본문 바로가기
Study/코딩 테스트

[프로그래머스] 두 개 뽑아서 더하기 - 자바(Java)

by 코드콩 2024. 9. 27.
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/68644?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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]

 

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12]  return 해야 합니다.

 

코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        // 중복값 제거를 위해 HashSet 생성
        HashSet<Integer> set = new HashSet<Integer>();
        
        // 경우의 수 구하기
        for(int i=0; i<numbers.length-1; i++) {
            for(int j=i+1; j<numbers.length; j++) {
                // 결과값 추가
                set.add(numbers[i] + numbers[j]);
            }
        }
        
        // Set을 배열로 변환
        int[] answer = new int[set.size()];
        int index = 0;
        for (int num : set) {
            answer[index++] = num;
        }

        // 직접 배열을 정렬
        Arrays.sort(answer);
        return answer;
    }
}

 

Stream 사용한 코드 : Stream 사용하면 코드가 가독성은 좋지만 속도가 더 느리다.

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        
        HashSet<Integer> set = new HashSet<Integer>();
        
        for(int i=0; i<numbers.length - 1; i++) {
            for(int j=i+1; j<numbers.length; j++) {
                set.add(numbers[i] + numbers[j]);
            }
        }
        
        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

 

정리

문제는 숫자 배열에서 서로 다른 두 수를 선택해서 더한 결과를 모두 구하고 오름차순으로 정렬해서 반환하면 됩니다.

입출력 예시를 보면, 중복값은 허용하지 않아야 합니다.

 

1. 배열에서 두 수를 선택하는 모든 경우의 수를 구합니다.

2. 구한 수를 중복값을 제거하고 새로운 배열에 저장합니다.

3. 배열을 오름차순으로 정렬합니다.

 

 

728x90
반응형