STUDY/Algorithm

[프로그래머스] 최솟값만들기 python, C

sinawi95 2021. 4. 2. 10:47
728x90

programmers.co.kr/learn/courses/30/lessons/12941

 

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

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

programmers.co.kr

def solution(A,B):
    answer = 0
    A.sort()
    B.sort()
    for i in range(len(A)):
        answer += A[i]*B[len(B)-1-i]

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

// A_len은 배열 A의 길이입니다.
// B_len은 배열 B의 길이입니다.
int compare(const int *a, const int*b){
    return *a>*b?1:-1;
}
int solution(int A[], size_t A_len, int B[], size_t B_len) {
    int answer = 0;
    qsort(A, A_len,sizeof(int),compare);
    qsort(B, B_len,sizeof(int),compare);
    
    for (int i=0; i < A_len; i++){
        // printf("%d %d\n", A[i],B[B_len-1-i]);
        answer += A[i]*B[B_len-1-i];
    }
    return answer;
}

타인의 코드를 가져왔다.

파이썬과 C가 다르지 않은 코드이다.

C로 sort를 직접 작성해야하나 걱정했는데 stdlib.h에 qsort라는게 있었다.

정렬할 배열과, 길이, 원소당 크기, 비교함수를 넣어주면 된다.

비교함수는 각 원소마다 비교하면서 큰경우 1을 리턴하고 작거나 같은경우 -1 을 리턴하는데 1을 리턴하면 오름차순으로 변경한다. (원소가 같은경우 0을 리턴해야하는데 그냥 계산 조금더 해도 상관없어서 이렇게 사용한듯하다.)

 

 


ko.wikipedia.org/wiki/Stdlib.h

 

stdlib.h - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. stdlib.h는 C 언어의 표준 라이브러리로, 문자열 변환, 사 난수 생성, 동적 메모리 관리 등의 함수들을 포함하고 있다. 함수 설명 문자열 변환 int atoi ( const char * str

ko.wikipedia.org

twpower.github.io/56-qsort-in-c

 

[C] C언어에서 qsort 사용하기

Practice makes perfect!

twpower.github.io