고양이와 코딩

[프로그래머스] 1월2일 ~ 본문

javascript

[프로그래머스] 1월2일 ~

ovovvvvv 2024. 1. 3. 00:04
728x90

1월2일

정수 내림차순으로 배치하기

 

내 풀이

 

function solution(n) {
    const Str_n = n.toString().split('').sort().reverse().join('');
    return Number(Str_n);
}

 

 

1월3일

하샤드 수

 

내 풀이

function solution(x) {
    let sum = 0;
    const str_x = (x + "").split('');
    
    str_x.forEach((value, index) => {
        sum += parseInt(value);
    })
    
    return x % sum === 0 ? true : false;
}

 

 

두 정수 사이의 합

 

내 풀이

function solution(a, b) {
    let sum = 0;
    
    if (a < b) {
        for (let i = a; i <= b; i++){
            sum += i;
        }
    } else {
        for (let j = b; j <= a; j++){
            sum += j;
        }
    }
    return sum;
}

단순무식 한눈에 들어오는 풀이 ~ ^,^

 

1월4일

콜라츠 추측

 

내 풀이

function solution(num) {
    let count = 0;
    
    while(count <= 500 && num !== 1){
        if (num % 2 === 0){
            num /= 2;
        } else {
            num = (num * 3) + 1;
        }
        count++;
    }
    
    if(num === 1){
        return count;
    } else {
        return -1;
    }
}

 

다른 사람의 풀이

function collatz(num) {
    var answer = 0;
    while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }
    return num == 1 ? answer : -1;
}

깔꼼하다

 

 

1월5일

음양 더하기

 

내 풀이

function solution(absolutes, signs) {
    for (let i = 0; i < signs.length; i++){
        if(signs[i] == false){
            absolutes[i] = absolutes[i] * (-1);
        }
    }
    const answer = absolutes.reduce((acc, curr) => {
        return acc + curr;
    }, 0);
    
    return answer;
}

 

다른 사람의 풀이

function solution(absolutes, signs) {

    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
function solution(absolutes, signs) {
    let answer = 0;
    for (let i = 0; i < absolutes.length; i++) {
        signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
    }
    return answer;
}

둘다 멋진 방법이네요

true와 false활용을 잊지 맙시다!!!

 

 

1월6일

나누어 떨어지는 숫자 배열

 

내 풀이

function solution(arr, divisor) {
    let answer = [];
    
    arr.forEach((value, index) => {
        if(value % divisor === 0) {
            answer.push(value);
        }
    })
    return answer.length ? answer.sort((a, b) => (a - b)) : [-1];
}

 

다른 사람의 풀이

function solution(arr, divisor) {
    var answer = arr.filter(v => v%divisor == 0);
    return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
}

filter사용은 생각도 못했다............

 

없는 숫자 더하기

 

내 풀이

function solution(numbers) {
    let answer = 0;
    
    for (let i = 0; i <= 9; i++){
        if(!numbers.includes(i)){
            answer += i;
        }
    }
    return answer;
}

 

다른 사람의 풀이

function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

 

 

1월7일

핸드폰 번호 가리기

 

내 풀이

function solution(phone_number) {
    const answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
    return answer;
}

repeat를 사용해서 phone_number의 뒤에서 4개를 뺀 부분문자열만큼을 * 로 채우고 마지막 4개를 더한당

 

 

제일 작은 수 제거하기

 

내 풀이

function solution(arr) {
    const min_num = Math.min(...arr); 
    const newArr = arr.filter(num => num !== min_num);
    
    return newArr.length > 0 ? newArr : [-1];
}

 

const min_num = Math.min(arr) 라고 하면 안되고, 배열의 요소를 하나하나 전달해 주어야 하므로 전개 연산자(...)를 사용합니다!