알고리즘/프로그래머스

<프로그래머스> 두 개 뽑아서 더하기

흰색텀블러 2024. 8. 2. 14:59

<링크>

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

<입력 및 출력>

 

<고려사항>

1. 서로 다른 인덱스이기 때문에, 같은 인덱스가 또 계산이 되면 안되겠네요..! (1번 인덱스값 + 1번 인덱스값 X)

2.  같은 값들이 중복되서 들어가면 안되겠네요! (0+7 =7, 2+5 =7임. 7이 두번 들어가면 안됨!!)

 

<풀이 시작 전 생각한 사항>

1. 마지막 인덱스에 있는 값의, 계산에 포함될수 없으니, 범위는 인덱스값-1을 해야겠다. (마지막 인덱스 두번 계산 x)

2. 출력 값이 오름차순이기 때문에, sort를 해줘야하고, 중복이 허용되면 안되기에, set을 써야겠다!!

 

<풀이 - Python>

def solution(numbers):
    answer = []
    for i in range(len(numbers)-1):
        for j in range(i+1,len(numbers)):
            if (numbers[i] + numbers[j]) not in answer:
                answer.append(numbers[i] + numbers[j])
    answer = sorted(set(answer))
    return answer

 

코드 진행 순서

1. 임시 변수 i는 number -1 의 길이만큼 진행을 한다

2. 임시 변수 j는 i보다 1큰 수부터 numbers의 범위만큼 진행한다.

3. 제공받은 list의 인덱스 값이 answer 리스트에 존재 하지 않는다면,  answer에 추가하자.

4. for문을 다 돈 answer에서, 중복제거 및 정렬을 진행한다.

 

<풀이 - Java>

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

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        ArrayList<Integer> answerList = new ArrayList<>(); 
        
        for (int i = 0; i < numbers.length - 1; i++) {
            for (int j = i + 1; j < numbers.length; j++) {
                int sum = numbers[i] + numbers[j];
                if (!answerList.contains(sum)) {
                    answerList.add(sum); 
                }
            }
        }
        
        Collections.sort(answerList); 
        
        answer = new int[answerList.size()];
        for (int i = 0; i < answerList.size(); i++) {
            answer[i] = answerList.get(i);
        }
        
        return answer;
    }
}

 

1. int 형태의 배열을 선언한다.

2. 계산 되는 값을 담기 위한 arrayList을 선언한다.

3. for문의 경우, python과 동일

4. answerList에 sum이라는 변수가 없다면(! ~~.contains), answerList에 추가하라 (. add)

5. Collections 함수의 sort를 활용하여 정렬 진행

6. answerList의 크기(.size() )만큼 새로운 answer을 지정한다.

7. answerList에 있는 값들을 하나씩 얻어와(.get) answer에 담는다

8. return 출력한다.

 

소요시간 : 20분

저는 python으로 사전에 완성을 한 후에, java로 푼 케이스입니다.

혹, 궁금한 사항이 있으시면 댓글 남겨주세요!