본문 바로가기

프로그래머스 코딩테스트

프로그래머스 코딩테스트 입문 DAY2

방학을 맞이해

해볼만한 일을 찾던 중 ...

프로그래머스스쿨에 코딩테스트 입문이 잇길래

한 번 풀어봣당

그나마 배운게 C라서

C로 풀어봣다

자바 더 배우면 자바로도 풀어봐야지

DAY1은 그냥 덧셈뺄셈이라 패스

첫번째 - 두 수의 나눗셈

정수 num1num2가 매개변수로 주어질 때, num1num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

입출력 예

num1
num2
result
3
2
1500
7
3
2333
1
16
62

int solution(int num1, int num2) {
    int answer = 0;
    answer = (double)num1/num2*1000;
    return answer;

요로케 풀엇다

아주간단함^^...

강제형변환만 조금 신경써주면 된다

두번째 - 숫자 비교하기

정수 num1num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

입출력 예

num1
num2
result
2
3
-1
11
11
1
7
99
-1

 

int solution(int num1, int num2) {
    int answer = 0;
    if(num1==num2)
        answer=1;
    else
        answer=-1;
    return answer;
}

얘도 머 간단하다

아예 answer 값을 안쓰고 바로 리턴해두 된다

여기까지 풀엇을때

음^^? 할만한디?

라고 생각햇다

...

세번째 - 분수의 덧셈

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

입출력 예

numer1
denom1
numer2
denom2
result
1
2
3
4
[5, 4]
9
2
1
3
[29, 6]
 

 

 

int* solution(int numer1, int denom1, int numer2, int denom2) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int* answer = (int*)malloc(sizeof(int));
    
    
    int result_numer, result_denom;
    result_numer = numer1*denom2 + numer2*denom1;
    result_denom = denom1*denom2;
    
    int i, n;
    int bigger=-99;
    if(result_numer>result_denom)
        bigger=result_numer;
    else
        bigger=result_denom;
    
    int flag=-1;
    for(i=2;i<bigger;i++)
        if(result_numer%i==0 && result_denom%i==0){
            n=i;
            flag++;
        }
    if(result_numer==result_denom)
        n=bigger;
        
    if(flag!=-1){
    result_numer/=n;
    result_denom/=n;
    }
    
    answer[0]=result_numer;
    answer[1]=result_denom;
    return answer;
}

 

고민을 진짜 엄청오래함

네개 중에 제일 오래 풀엇다

일단 둘이 더해주고

둘의 공약수를 찾아 약분하는 과정을 거쳣다

근데 글을 쓰면서 다시 보니까 수정해야할 부분도 보이고

코드가 너무 지저분하다는 생각이 든다

분명 먼가 더 짧게 쓸 수 잇을거같은데...

역시 두번째로 보면 먼가 수정할 부분도 보이는 것 같다

다시 풀어서 올려보갯다!

//수정함

 

int* solution(int numer1, int denom1, int numer2, int denom2) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int* answer = (int*)malloc(sizeof(int));
    
    
    int result_numer, result_denom;
    result_numer = numer1*denom2 + numer2*denom1;
    result_denom = denom1*denom2;
    
    int i, n;
    int smaller=99;
    if(result_numer<result_denom)
        smaller = result_numer;
    else
        smaller = result_denom;
    
    int flag=-1;
    for(i=2;i<=smaller;i++)
        if(result_numer%i==0 && result_denom%i==0){
            n=i;
            flag++;
        }
       
    if(flag!=-1){
    result_numer/=n;
    result_denom/=n;
    }
    
    answer[0]=result_numer;
    answer[1]=result_denom;
    return answer;
}

 

조금 짧아졋어요

하하하

bigger를 smaller로 바꿔서 더 반복문 돌아가는 횟수를 줄엿고요...

분모와 분자가 같을때를 따로 if로 안빼고 for문 안에서 될 수 있도록 햇습니다

네번째 - 배열 두 배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

입출력 예

numbers
result
[1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3]
[2, 4, 200, -198, 2, 4, 6]

 

int* solution(int numbers[], size_t numbers_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int* answer = (int*)malloc(1);
    int i;
    for(i=0;i<numbers_len;i++)
        numbers[i]*=2;
        
    answer=numbers;
    return answer;
}

 

아직 동적할당을 안배워서

몰ㅋ룸

뼈대코드 그대로 둬도 풀리길래 걍둿다

그냥 반복문 써서 2씩 곱해주면된당

간단

여기까지 2일차엿다

하루에 네개라 부담없이 풀기 좋은듯

갈 수록 조금씩 어려워지겟지만~...

꾸준히 풀어보갯읍니다

^_^

화이팅