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

24/07/29 알고리즘 문제

by Jini_Lamp 2024. 7. 29.

1. 최대공약수와 최소공배수(https://school.programmers.co.kr/learn/courses/30/lessons/12940)

function solution(n, m) {
    var answer = [];
    var maxNum = [], minNum = [];
    var i = 1;
    
    while(1)
    {
        if(m < i)
            break;
        if(m % i === 0 && n % i === 0)
            maxNum.push(i);
        i+=1;
    }
    
    for(var j = n*m; j>=1; j--){
        if(j%n==0 && j%m==0)
            minNum.push(j);
    }
    
    answer.push(maxNum[maxNum.length - 1]);
    answer.push(minNum[minNum.length - 1]);
    
    return answer;
}

 

 

 

2. 3진법 뒤집기(https://school.programmers.co.kr/learn/courses/30/lessons/68935?language=c)

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

int solution(int n) {
    int answer = 0;
    int num = n;
    long long threeNum = 0;	// int로 해보니 오류가 테스트 2, 8, 9, 10에서 문제가 생긴다...
    
    while(num > 0)
    {
        threeNum *= 10;
        threeNum += (num % 3);
        num /= 3;
    }
    
    int i=1;
    while(threeNum > 0)
    {
        answer += (threeNum % 10) * i;
        i *= 3;
        threeNum /= 10;
    }
    
    return answer;
}


// js
function solution(n) {
    var answer = 0;
    var num = [];
    
    while(n > 0){
        num.push(n % 3);
        n = parseInt(n /= 3);
    }
    
    var j = 1;
    for(var i=num.length - 1; i>=0; i--){
        answer += num[i] * j;
        j *= 3;
    }
    
    return answer;
}

 

 

 

3. 이상한 문자 만들기(https://school.programmers.co.kr/learn/courses/30/lessons/12930)

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

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(strlen(s) + 1);
    int ctr = 0;
    strcpy(answer, s);
    
    for(int i=0; i<strlen(s); i++)
    {
        if(ctr % 2 == 0 && islower(answer[i]))
        {   // 짝수에 소문자면 대문자로 변경
            answer[i] += ('A' - 'a');
        }
        else if(ctr % 2 == 1 && isupper(answer[i]))
        {   // 홀수에 대문자면 소문자로 변경
            answer[i] -= ('A' - 'a');
        }
        else if(answer[i] == ' ')
        {
            ctr = 0;
            continue;
        }
        
        ctr++;
    }
    
    return answer;
}


// js
function solution(s) {
    var answer = '';
    var j = 0;
    
    for(var i=0; i<s.length; i++){
        if(j % 2 === 0)
            answer += s[i].toUpperCase();
        else if(j % 2 === 1)
            answer += s[i].toLowerCase();
        
        j++;
        
        if(s[i] === ' '){
            answer += "";
            j = 0;
        }
    }
    
    return answer;
}

 

 

 

4. 삼총사(https://school.programmers.co.kr/learn/courses/30/lessons/131705)

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

int solution(int number[], size_t number_len) {
    int answer = 0;
    int sum = 0;
    
    for(int i = 0; i < number_len; i++)
        for(int j = i + 1; j < number_len; j++)
            for(int k = j + 1; k < number_len; k++)
            {
                sum = number[i] + number[j] + number[k];
                if(sum == 0)
                    answer++;
            }
    
    return answer;
}


// js
function solution(number) {
    var answer = 0;
    var sum = 0;
    
    for(var i=0; i<number.length; i++)
        for(var j=i+1; j<number.length; j++)
            for(var k=j+1; k<number.length; k++){
                sum = number[i] + number[j] + number[k];
                if(sum === 0)
                    answer++;
            }
    
    return answer;
}

 

 

 

5. 크기가 작은 부분(https://school.programmers.co.kr/learn/courses/30/lessons/147355)

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

int solution(const char* t, const char* p) {
    long long answer = 0, tNum, pNum = atoll(p);
    
    for(int i=0; i<=strlen(t) - strlen(p); i++)
    {
        tNum = 0;
        
        for(int j=0; j<strlen(p); j++)
        {
            tNum *= 10;
            tNum += t[i + j] - '0';
        }
        
        if(tNum <= pNum)
            answer++;
    }
    
    return answer;
}


// js
function solution(t, p) {
    var answer = 0;
    
    for(var i=0; i<=t.length - p.length; i++){
        var num = t.substr(i, p.length);
        
        if(Number(num) <= Number(p))
            answer++;
    }
    return answer;
}

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

24/07/31 알고리즘 문제  (0) 2024.07.31
24/07/30 알고리즘 문제  (0) 2024.07.30
24/07/16 SQL 문제  (0) 2024.07.16
24/07/15 알고리즘 문제  (0) 2024.07.15
24/07/11 SQL 문제  (0) 2024.07.11