hoon's bLog

Java 프로그래머스 두 개 뽑아서 더하기 자바 본문

코딩테스트/프로그래머스

Java 프로그래머스 두 개 뽑아서 더하기 자바

개발한기발자 2022. 6. 3. 18:00
반응형

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/68644

 

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

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

programmers.co.kr


 

[나의 풀이]

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Solution01 {
	public static int[] solution(int[] numbers) {
    	//합계값을 닮을 set 선언
        Set<Integer> sumSet = new HashSet<>();
		
        //마지막 인덱스는 안쪽 for문에서 처리하므로 배열길이-1
        for(int i = 0; i < numbers.length-1; i++) {
            for(int j = i+1; j < numbers.length; j++) {
            	//입력 배열의 인덱스 두 개값을 더해 set에 add
                sumSet.add(numbers[i] + numbers[j]);
            }
        }
        int[] answer = new int[sumSet.size()];
        
        int no = 0;
        
        //return 변수에 값을 넣기 위해 foreach로 데이터를 뽑아줌
        for(int num: sumSet) {
            answer[no++] = num;
        }
        
        //올림차순으로 정렬
        Arrays.sort(answer);

        return answer;
    }
    
    //정답 확인용 코드
    public static void main(String[] args) {
        int[] result = {};
        result = solution(new int[]{1,1,2,3});
        System.out.println(Arrays.toString(result));
    }
}

 

[다른사람의 풀이]

import java.util.HashSet;
import java.util.Set;

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

        for(int i=0; i<numbers.length; i++) {
            for(int j=i+1; j<numbers.length; j++) {
                set.add(numbers[i] + numbers[j]);
            }
        }

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

정리

- Set을 활용하여 배열에 데이터를 넣어주는 것이 관건

- HashSet이 아닌 TreeSet으로 바꾸어주면, add 하면서 정렬이 되기 때문에, Arrays.sort(answer) 부분이 절약됨.

- stream컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리함.

- set에 담긴 데이터를 sorted()로 정렬 후, mapToInt()로 int 배열로 변환시킨다.

 

일이 바쁘다는 핑계로 코딩테스트 문제 푸는것에 소홀 했었는데,

최근에 풀면서 나의 부족한 부분을 발견하게된 계기가 된것 같다.

앞으로 이런식으로 푼 문제들을 정리하고, 내 코드 주석 달기 및 다른 사람 풀이 분석/리뷰를 통해,

코딩 실력을 더욱 향상시키고, 배운건 잊지 않도록 꾸준히 기록해 봐야겠다.

 

참고 블로그 : https://keichee.tistory.com/390

728x90
반응형