프로그래머스/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