프로그래머스/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