728x90
▶문제 : 코딩테스트 연습 - 최솟값 만들기 | 프로그래머스 (programmers.co.kr)
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// A_len은 배열 A의 길이입니다.
// B_len은 배열 B의 길이입니다.
int solution(int A[], size_t A_len, int B[], size_t B_len)
{
int answer = 0;
int temp;
for (int i = 0; i < A_len - 1; i++) {//배열 A 오름차순 선택정렬
int min = i;
for (int j = i + 1; j < A_len; j++) {
if (A[min] > A[j]) min = j;
}
if (min != i) {
temp = A[min];
A[min] = A[i];
A[i] = temp;
}
}
for (int i = 0; i < B_len - 1; i++) {//배열 B 내림차순 선택정렬
int max = i;
for (int j = i + 1; j < B_len; j++) {
if (B[max] < B[j]) max = j;
}
if (max != i) {
temp = B[max];
B[max] = B[i];
B[i] = temp;
}
}
for (int i = 0; i < A_len; i++) {
//배열 A는 작은 값부터, 배열 B는 큰 값부터 곱
answer += A[i] * B[i];
}
return answer;
}
▶해석
배열 A와 배열 B를 이용해 어떻게든 최솟값을 만들어야 하므로 한 배열은 작은 값부터, 다른 배열은 큰 값부터 서로 곱하면 최솟값이 나온다. 가장 큰 값을 가장 작은 값으로 곱해야 가장 작은 수가 나오기 때문이다.
따라서 배열 A를 작은 값부터 곱하기 위해 선택 정렬을 이용해 오름차순으로 정렬하고
배열 B를 큰 값부터 곱하기 위해 선택 정렬을 이용해 내림차순으로 정렬하였다.
이제 i=0부터 반복하여 배열 A와 배열 B를 곱한 값을 answer변수에 더해준다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : 이진 변환 반복하기 C언어 (2) | 2022.04.24 |
---|---|
프로그래머스 Level 2 : 행렬 테두리 회전하기 C언어 (0) | 2022.04.23 |
프로그래머스 Level 2 : N개의 최소공배수 C언어(시간단축) (0) | 2022.03.28 |
프로그래머스 Level 2 : 가장 큰 수 C언어 (0) | 2022.03.26 |
프로그래머스 Level 1 : 신고 결과 받기 C언어 (5) | 2022.03.14 |
댓글