프로그래머스/C

프로그래머스 Level 1 : 두 개 뽑아서 더하기 C언어

starfish22 2021. 11. 28. 13:34
728x90

▶문제 : 코딩 테스트 연습 - 두 개 뽑아서 더하기 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

▶코드 작성

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// numbers_len은 배열 numbers의 길이입니다.
int *solution(int numbers[], size_t numbers_len)
{
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int *answer;
    int num[10001];
    int len = 0, temp;

    for (int i = 0; i < numbers_len - 1; i++)//각 숫자끼리 덧셈
    {
        for (int j = i + 1; j < numbers_len; j++)
        {
            num[len++] = numbers[i] + numbers[j];
        }
    }

    for (int i = 0; i < len - 1; i++)//선택정렬 오름차순
    {
        int min = i;
        for (int j = i + 1; j < len; j++)
        {
            if (num[j] < num[min])
            {
                min = j;
            }
        }
        if (i != min)
        {
            temp = num[i];
            num[i] = num[min];
            num[min] = temp;
        }
    }

    answer = (int *)malloc(sizeof(int) * len);//모든수를 더한 개수 len 만큼 동적할당

    for (int i = 0, n = 0; i < len; i++)//answer배열 자리 변수 n 선언
    {
        answer[n++] = num[i];
        while (num[i] == num[i + 1]) i++; //겹치는 숫자 건너뛰기
    }

    return answer;
}

 

▶해석

각 숫자끼리 더한 모든 수를 num배열에 담아 선택 정렬로 오름차순으로 정렬한다. answer포인터에 num배열의 길이 len 만큼 동적 할당을 한다. while문을 이용해 num [i]와 그 앞 숫자 num [i+1]이 같을 때 i++ 해줘서 겹치는 숫자를 건너뛰었다.

728x90