본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 2 : 최솟값 만들기 C언어

by starfish22 2022. 4. 21.
728x90

▶문제 : 코딩테스트 연습 - 최솟값 만들기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 최솟값 만들기

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱

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

댓글