프로그래머스

[프로그래머스_Level1] 두 개 뽑아서 더하기

빙수빈수 2021. 7. 16. 14:31

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 이하입니다.

 

[코드]

import java.util.*;

class Solution {
public int[] solution(int[] numbers) {
        // 중복 값을 허용하지 않는 hashSet 선언
		Set<Integer> hashSet=new HashSet<Integer>();
        
		// 서로 다은 인덱스에 있는 두 개의 수를 뽑아 더한 값을 hashSet에 저장
        for(int i=0;i<numbers.length;i++) 
        	for(int j=i+1;j<numbers.length;j++)
        		hashSet.add(numbers[i]+numbers[j]);
        
        /*
         * hashSet에서 값을 가져오기 위해서느 Iterator를 사용해야 한다.
         * hashSet.iterator()로 hashSet을 iterator에 담은 후
         * .next() 함수를 통해 값을 하나씩 뽑아내야 한다.
         */
        Iterator<Integer> iter=hashSet.iterator();
        int[] answer=new int[hashSet.size()];
        int count=0;
        while(iter.hasNext()) {
        	answer[count]=iter.next();
        	count++;
        }
        
        // 배열 값을 정렬하여 반환
        Arrays.sort(answer);
        return answer;
    }
}


[고찰]

 이번 문제는 값의 중복을 허용하지 않는 자료구조인 HashSet을 사용하면 중복을 고려하지 않고 문제를 해결할 수 있다. 단, HashSet에 있는 값을 가져오기 위해서는 Iterator를 사용해야 한다는 점만 주의하면 쉽게 해결할 수 있는 문제이다.