JavaScript - 프로그래머스 레벨 : 0(11) - ORDER BY '정답률'

먹보·2022년 12월 26일
0

1. 영어가 싫어요.

문제 : 영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

function solution(numbers) {
    const arr = [];
    let str = '';
    const numSet = {
        zero:0,
        one:1,
        two:2,
        three:3,
        four:4,
        five:5,
        six:6,
        seven:7,
        eight:8,
        nine:9
    };
    for (let i = 0 ; i < numbers.length ; i++){
        str+= numbers[i]
        for(let key in numSet){
            if(str.includes(key)){
                arr.push(numSet[key])
                str=''
            }
        }
    }
    return Number(arr.join(''))
}
///다른 사람의 풀이

function solution(numbers) {
    numbers = numbers.replace(/one/g, 1);
    numbers = numbers.replace(/two/g, 2);
    numbers = numbers.replace(/three/g, 3);
    numbers = numbers.replace(/four/g, 4);
    numbers = numbers.replace(/five/g, 5);
    numbers = numbers.replace(/six/g, 6);
    numbers = numbers.replace(/seven/g, 7);
    numbers = numbers.replace(/eight/g, 8);
    numbers = numbers.replace(/nine/g, 9);
    numbers = numbers.replace(/zero/g, 0);
    return numbers*1
}

🗒️코멘트 : 난..이 문제를 왜 이렇게 어렵게 푼 걸까..처음에 replace를 썼지만, 생각해보니 replacenumbers 인자에 직접적인 영향을 끼치지는 않는다는 것이다..그래서 거기에 막혀 방향을 바꿔 저렇게 풀었는데..다른 사람들 풀이 법을 보니..나는 아직 멀었다는 생각이 들었다.

2. 소인수분해

문제 : 소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 2 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    const divisors = [];
    const primes =[];
    for (let i = 1 ; i <= n ;i++){
        if (n % i == 0){
            divisors.push(i)
        }
    }
    for (let j= 0; j <divisors.length;j++){
        if(findPrimes(divisors[j])){
            primes.push(divisors[j])
        }
    }
    return primes
}

function findPrimes(divisor){
    const primesQ = [];
    for (let i = 1 ; i <= divisor ;i++){
        if (divisor % i == 0){
            primesQ.push(i)
        }
    }
    if(primesQ.length == 2){
        return true
    } else{return false}
}

🗒️코멘트 : 수학을 좋아하는 사람으로써 한 번쯤은 풀어보고 싶었던 문제!

3. 구슬을 나누는 경우의 수

문제 : 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

function solution(balls, share) {
    const numerator = fact(balls);
    const denom1 = fact(share);
    const denom2 = fact((balls-share))
    let answer = Math.round(numerator / (denom1*denom2))
    return answer
}

function fact(number){
    let answers = 1;
    for (let i = number; i >= 1; --i){
        BigInt(answers *= i)
    }
    return answers 
}

🗒️코멘트 : 푸는 방식은 알았으나.....계속 답이 나오지 않아 일일이 몇 가지 테스트를 거쳐 가며 깨달았다....자바스크립트 내에서 정수를 표현하는 방식이 정해져 있다는 것을..자바스크립트 내에서는 큰 정수의 경우 BigInt를 써줘야 하며 그걸 쓸 경우, 반올림을 해줘야 되는 것을...

4. 문자열 계산하기

문제 : my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

제한사항

  • 연산자는 +, -만 존재합니다.
  • 문자열의 시작과 끝에는 공백이 없습니다.
  • 0으로 시작하는 숫자는 주어지지 않습니다.
  • 잘못된 수식은 주어지지 않습니다.
  • 5 ≤ my_string의 길이 ≤ 100
  • my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
    • my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
    • 계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
    • my_string에는 연산자가 적어도 하나 포함되어 있습니다.
  • return type 은 정수형입니다.
  • my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.
function solution(my_string) {
    const splited = my_string.split(" ");
    
    let ans = Number(splited[0]);
    
    splited.forEach((item, index) => {
        if(item === "+"){
            ans += Number(splited[index + 1]);
        }
        
        if(item === "-"){
            ans -= Number(splited[index + 1]);
        }
    })
    
    return ans;
}

🗒️코멘트 : 배열로 변환한 후 기호에 따라 다음 문자를 더해 줄 지, 빼 줄지를 생각해보면 될 것을 너무 어렵게 생각했다.

5. 종이 자르기

문제 : 머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.

function solution(M, N) {
    let vertical = M - 1;
    let horizontal = (N-1) * M;
    return vertical + horizontal
}

🗒️코멘트 : NULL

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글