프로그래머스/level 0

[C] 사칙연산, 조건문, 분수의 덧셈, 배열 두배

정보통신 고심이 2022. 12. 29. 13:46

1. 두 수의 나눗셈

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

int solution(int num1, int num2) 
{
    double answer= ((double) num1/(double) num2)*1000;
    
    return answer;
}
결과 값*1000을 고집했었는데 고정관념이었다.
수학적으로 생각하기!

 

2. 숫자 비교하기

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

int solution(int num1, int num2) 
{
    int answer = 1;
    if(num1==num2)
        return answer;
    
    else if (num1!=num2)
        return -answer;
}
else / else if 구분
삼항 연산자 : ( ? : ) - [조건식] ? [참일 경우 반환값] : [거짓일 경우 반환값]

 

3. 분수의 덧셈

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

int* solution(int denum1, int num1, int denum2, int num2) 
{
    int* answer = (int*)malloc(1); //배열 동적할당
    int num3=1; //최대 공약수 변수 초기화
    
        for(int i=1; i<=(denum1*num2+denum2*num1); i++) //분자 값까지 i 탐색
        {
            if((denum1*num2+denum2*num1)%i==0 && (num1*num2)%i==0) //분자와 분모가 동시에 나누어지는 수를
                num3=i; //최대공약수 값으로 설정 
        }
        
        answer[0]=(denum1*num2+denum2*num1)/num3; //분자 배열
        answer[1]=(num1*num2)/num3; //분모 배열 
    
    return answer;
}
분모가 같은 경우, 다른 경우 / 곱했을 때 최대 공약수가 될 경우 등 여러 가지 경우를 고려해봤었는데, 곱셈 연산을 하고 약분을 하는 경우가 가장 깔끔했다. 
TIP 최소공배수(통분), 최대공약수(약분) 

 

4. 배열 두배 만들기

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

int* solution(int numbers[], size_t numbers_len)
{
    int* answer = (int*)malloc(10000);
    for (int i=0; i<numbers_len; i++)
    {
        answer[i] = numbers[i]*2;
    }
    return answer;
    free(answer);
}
배열의 모든 값은 반복문으로 접근 가능
주어진 배열의 길이 변수 활용할 것
malloc(sizeof(자료형)))

 

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges