본문 바로가기
프로그래머스

24/07/05 프로그래머스 알고리즘

by Jini_Lamp 2024. 7. 5.

1. 가운데 글자 가져오기(https://school.programmers.co.kr/learn/courses/30/lessons/12903)

// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* solution(const char* s) {
    int len = strlen(s);
    // 짝수면 글자를 2개만 남기고,
    // 홀수면 글자를 1개만 남긴다.
    int harlf = 2 - (len % 2);
    int copyStart = (len / 2) - (1 - 1 * (len % 2));
    
    char* answer = (char*)malloc(harlf);
    memset(answer, 0, harlf);
    
    strncat(answer, &s[copyStart], harlf);
    
    return answer;
}

// js
function solution(s) {
    var answer = '';
    var len = s.length;
    var harlf = 2 - parseInt(len % 2);
    var copyStart = parseInt(len / 2) - (1 - 1 * parseInt(len % 2));
    
    answer += s.substr(copyStart, harlf);
    
    return answer;
}

 

 

 

2. 수박수박수박수박수박수?(https://school.programmers.co.kr/learn/courses/30/lessons/12922?language=c)

// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* solution(int n) {
    char* answer = (char*)malloc(n * strlen("수"));
    memset(answer, 0, n * strlen("수"));
    
    for(int i=0; i<n; i++)
    {
        if(i % 2 == 0)
            strcat(answer, "수");
        else
            strcat(answer, "박");
    }
    
    return answer;
}

// js
function solution(n) {
    var answer = '';
    
    for(var i=0; i<n; i++){
        if(parseInt(i % 2) == 0)
            answer += "수";
        else
            answer += "박";
    }
    return answer;
}

 

 

 

3. 내적(https://school.programmers.co.kr/learn/courses/30/lessons/70128)

// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int a[], size_t a_len, int b[], size_t b_len) {
    int answer = 0;
    
    for(int i=0; i<a_len; i++)
    {
        answer += (a[i] * b[i]);
    }
    
    return answer;
}

// js
function solution(a, b) {
    var answer = 0;
    
    for(var i=0; i<a.length; i++){
        answer += (a[i] * b[i]);
    }
    
    return answer;
}

 

 

 

4. 약수의 개수와 덧셈(https://school.programmers.co.kr/learn/courses/30/lessons/77884)

// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int left, int right) {
    int answer = 0;
    int count = 0;
    int i = 1;
    
    while(1)
    {
        if(right < left)
            break;
        
        if(left < i)
        {
            printf("%d의 약수 개수는 %d개\n", left, count);
            if(count % 2 == 0)
                answer += left;
            else
                answer -= left;
            
            left++;
            count = 0;
            i = 1;
        }
        
        if(left % i == 0)
            count++;
        i++;
    }
    
    return answer;
}

// js
function solution(left, right) {
    var answer = 0;
    var count = 0;
    var i = 1;
    
    while(1)
    {
        if(right < left)
            break;
        
        if(left < i)
        {
            if(count % 2 == 0)
                answer += left;
            else
                answer -= left;
            
            left++;
            count = 0;
            i = 1;
        }
        
        if(left % i == 0)
            count++;
        i++;
    }
    
    return answer;
}

 

이 문제는 다른 사람의 것이 좀 더 효율적으로 풀었다. 하여, 해당 방식도 같이 서술하고자 한다.

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

 

이 사람은 제곱근을 활용하여 푼 것을 알 수 있는데, 왜 그런가하니 제곱근이 정수면 약수의 개수가 홀수이기 때문이다.

한 눈에 봐도 30줄에 가까웠던 라인이 10줄을 간신히 넘길 정도로 줄어든 것이 보인다. 이래서 코딩을 할 때 어느정도 수학이 필요한가...

'프로그래머스' 카테고리의 다른 글

24/07/11 SQL 문제  (0) 2024.07.11
24/07/09 SQL 문제  (0) 2024.07.09
24/07/04 프로그래머스 알고리즘  (0) 2024.07.04
24/07/01 프로그래머스 알고리즘  (0) 2024.07.01
24/06/28 SQL 문제  (0) 2024.06.28