코린이의 소소한 공부노트

[프로그래머스/Lv.1] 두 개 뽑아서 더하기 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] 두 개 뽑아서 더하기

무지맘 2022. 11. 17. 02:14

1. Input

1) 정수 배열 numbers

 

2. Output

1) numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 오름차순으로 담은 배열

 

3. Constraint

1) numbers의 길이는 2 이상 100 이하

2) numbers의 모든 수는 0 이상 100 이하

 

4. Example

Input: numbers={2,1,3,4,1} -> Output: {2,3,4,5,6,7}

설명:

2 + 1 = 2 + 1 = 3

1 + 3 = 3 + 1 = 4

2 + 3 = 1 + 4 = 4 + 1 = 5

1 + 1 = 2

2 + 4 = 6
3 + 4 = 7

 

5. Code

1) 첫 코드(2022/??)

import java.util.Arrays;

int l = numbers.length;
int[] answer;

// lC2 만큼의 덧셈 연산을 해야 한다.
int[] sum = new int[l*(l-1)/2];;

// 덧셈 연산 결과를 sum[k]에 저장
int k=0;
for(int i=0 ; i<l-1 ; i++)
    for(int j=i+1 ; j<l ; j++)
        sum[k++] = numbers[i] + numbers[j];

// sum의 요소 오름차순 정렬
Arrays.sort(sum);

// 모든 수가 0일 경우 return
int sl = sum.length;
if(sum[sl-1] == 0)
    return new int[] {0};

// sum의 중복 제거
int[] tmp = new int[sl];
k=0; // tmp의 인덱스
tmp[0] = sum[0];
for(int i=1 ; i<sl ; i++) {
    if(sum[i] > tmp[k]) {
        tmp[k+1] = sum[i];
        k++;
    }
}

// tmp에서 0 시작 위치
for(k=sl-1 ; k>=0 ; k--)
    if(tmp[k] != 0) {
        k++;
        break;
}

// answer 채우기
answer = new int[k];
for(int i=0 ; i<k ; i++)
    answer[i] = tmp[i];
return answer;