STUDY/Algorithm

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

sinawi95 2021. 4. 2. 09:21
728x90

programmers.co.kr/learn/courses/30/lessons/68644

 

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

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

programmers.co.kr

from itertools import combinations
def solution(numbers):
    answer = []
    numbers_set=set()
    for i in combinations(numbers,2):
        numbers_set.add(sum(i))
    answer= sorted(list(numbers_set))
    return answer

python으로 빠르게 작성하였다


C로는 혼자 작성하지 못하여서 타인의 코드를 가져왔다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define SWAP(a,b) {int c=a; a=b; b=c;}

// numbers_len은 배열 numbers의 길이입니다.
int* solution(int numbers[], size_t numbers_len) {
    
    int* answer = (int*)malloc(sizeof(int) * 200);
    int cnt = 0;
    for (int i = 0; i < numbers_len; i++)
    {
        for (int j = i + 1; j < numbers_len; j++)
        {
            int tmp = numbers[i] + numbers[j];
            // 중복 제거
            int flag = 1;
            for (int k=0; k<cnt; k++)
            {
                if (answer[k] == tmp)
                    flag = 0;
            }
            if (flag==1)
                answer[cnt++] = tmp;
        }
    }
    // bubble sort
    for (int i=0; i< cnt; i++){
        for (int j=0; j< cnt-1-i; j++){
            if (answer[j]>answer[j+1]){
                SWAP(answer[j], answer[j+1]);
            }
        }
    }
    
    return answer;
}

이렇게 쉬운것도 혼자 못한다니 참으로 부끄럽다!

더 열심히 해야겠다.