programmers.co.kr/learn/courses/30/lessons/68644
코딩테스트 연습 - 두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한
programmers.co.kr
- 목록 중에서 한 개씩 뽑고 같은 index가 아니라면 더하는 것이다. 중복제거 또한 해야함
- <algorithm>을 써도 되지만 문제가 C만을 사용해서 쓰라는 것 같길래 for()문 2개를 활용한 오름차순 정렬을 사용했는데, 통과가 된다. 실제적으로 속도를 높이며련 퀵 정렬, 합병 정렬, 힙 정렬을 쓰자.
더보기
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX_LEN 990000
int buff[MAX_LEN + 1] = { 0, };
int* solution(int numbers[], size_t numbers_len) {
int buffIdx = 0;
for (int lhsIdx = 0; lhsIdx < numbers_len; lhsIdx++)
{
const int lhs = numbers[lhsIdx];
for (int rhsIdx = 0; rhsIdx < numbers_len; rhsIdx++)
{
if (lhsIdx == rhsIdx)
continue;
const int rhs = numbers[rhsIdx];
const int sum = lhs + rhs;
// check
bool bIsExisted = false;
for (int idx = 0; idx < buffIdx; idx++)
{
if (sum == buff[idx])
{
bIsExisted = true;
break;
}
}
if (false == bIsExisted)
{
buff[buffIdx] = sum;
buffIdx++;
}
}
}
// sort
for (int lhs = 0; lhs < buffIdx; lhs++)
{
for (int rhs = 0; rhs < buffIdx; rhs++)
{
if (buff[lhs] < buff[rhs])
{
int temp = buff[lhs];
buff[lhs] = buff[rhs];
buff[rhs] = temp;
}
}
}
int* answer = (int*)malloc(sizeof(int) * (buffIdx));
answer = buff;
return answer;
}
int main()
{
int numbers[] = { 5,0,2,7 };
int numbers_len = sizeof(numbers) / sizeof(int);
int* ans = solution(numbers, numbers_len);
return 0;
}
'Coding Problem > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv1] - 내적 (0) | 2021.04.25 |
---|---|
[프로그래머스/Lv1] - 음양 더하기 (0) | 2021.04.25 |
[프로그래머스/Lv1] - 같은 숫자는 싫어 (0) | 2021.04.25 |
[프로그래머스/Lv1] - 가운데 글자 가져오기 (0) | 2021.04.25 |
[프로그래머스/LV1] - 2016년 (0) | 2021.04.24 |