프로그래머스 코딩테스트

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

지우야! 2024. 2. 3. 23:38

방학을 맞이해

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

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

한 번 풀어봣당

​

그나마 배운게 C라서

C로 풀어봣다

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

​

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

​

​

첫번째 - 두 수의 나눗셈

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 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;

요로케 풀엇다

아주간단함^^...

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

​

​

두번째 - 숫자 비교하기

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 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일차엿다

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

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

꾸준히 풀어보갯읍니다

^_^

화이팅