본문 바로가기
코딩테스트 연습

Progammers 두 개 뽑아서 더하기 Level 1

by 동배_ 2021. 9. 4.

문제 설명

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

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


제한사항

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

문제 해석 및 풀이 방법

1. 반복문을 통해 numbers의 모든 서로 다른 인덱스를 더한다 

2. 컬렉션 정렬을 써서 정렬시킨다.

3. answer을 반환한다. 

 

내가 작성한 소스코드(Java)

import java.util.Collections;
import java.util.ArrayList;

class Solution {
    public ArrayList<Integer> solution(int[] numbers) {      
        ArrayList<Integer> answer = new ArrayList<Integer>();
        
        for(int i=0;i< numbers.length;i++){
            int temp = numbers[i];
            for(int j=i+1;j<numbers.length;j++){
                if(answer.indexOf(temp+numbers[j]) < 0)
                    answer.add(temp+numbers[j]);
            }
        }
        Collections.sort(answer);
        return answer;
    }
}

이중 for문을 통해 서로 값을 더한 값이 answer에 없으면 answer에 추가하는 알고리즘이다

이때 for문은 두개의 인덱스를 더하는 과정에서 중첩되지 않게 (같은 인덱스 경우가 되지 않게)

j=i+1을 한다.

 

그후 Collections.sort를 이용하여 answer값을 정렬하고 반환한다.

 

결론 및 고찰

이 문제는 쉽게 풀었으나 사실 처음에는 그냥 이중폴문을 0~ numbers크기만큼을 2번 했었다. 물론 테스트코드는 합격했지만 조금 더 빠르게 할 수 있다 생각했고 j=i+1을 이용하여 속도를 많이 줄일 수 있엇다, 

 

소요 시간 20

댓글