카테고리 없음

JS 프로그래머스 (입문) 8-11일차

꼬드리 2024. 7. 12. 16:36

 

💡외계 행성의 나이

function digitToChar(digit) {
  return String.fromCharCode(digit + 'a'.charCodeAt(0));
}

function solution(age) {
    let ageArray = String(age).split("");
    let alphaArray = [];
    for(let i = 0; i < ageArray.length; i++) {
        let num = parseInt(ageArray[i]);
        console.log(num);
        alphaArray.push(digitToChar(num));
    }
    return alphaArray.join("");
}

어렵게 생각해서 함수를 만들었는데 다시 보니 0~9까지의 알파벳a~j만 두고 생각하면 되었다. 

map의 활용과 문자열 인덱스 접근에 대해 잊고 있어서 다시 확인차 기록해둔다.

function solution(age) {
  return age
    .toString()
    .split("")
    .map((v) => "abcdefghij"[v])
    .join("");
}

 

 

💡진료 순서 정하기

function solution(emergency) {
    let sorted = [...emergency].sort((a, b) => b - a);
    let answer = emergency.map(e => sorted.indexOf(e) + 1);
    
    return answer;
}

sort로 정렬했는데 indexOf를 몰라서 조금 헤맸다.

결과적으로 메서드만 알면 index만 뽑아서 새로운 배열로 리턴해주면 되는 문제.

 


💡개미 군단

function solution(hp) {
    let general = parseInt(hp/5);
    hp %= 5;
    
    let soilder = parseInt(hp/3);
    hp %= 3;
    
    let worker = hp;
    let totalAnts = general + soilder + worker;
    return totalAnts;
    
}

조건에 따라 개미의 체력을 나누는 점에서 약간 헤맨 문제이다. 

 

 

💡가위, 바위, 보

function solution(rsp) {
    let rspArray = rsp.split("")
    let strArray = [];
    for(let i = 0;i<rspArray.length;i++){
        if(rspArray[i] ==='2'){
            strArray.push('0')
        } else if(rspArray[i]==='0'){
            strArray.push('5')
        } else {
            strArray.push('2')
        }
    }
    return strArray.join("");
}

일단은 가장 무난하게 생각나는 방법인 if문으로 풀었다.

이와 달리 arr객체와 map 함수를 사용해서 더 간단하게 푸는 방법이 있었다.

객체에 키값 쌍이 존재한다는 것을 활용한 부분이 명료하게 느껴진다.

function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

💡점의 위치 구하기

function solution(dot) {
    let left = dot[0];
    let right = dot[1];    
    let answer = 0;
    if(left>0&&right>0){
        answer= 1;
    } else if(left<0&&right>0){
        answer = 2;
    } else if (left<0&&right<0){
        answer =3;
    } else {
        answer = 4;
    }
    return answer;
}

어떻게든 풀기는 했는데, 아래 같이 if문은 한줄로 쓰고 변수명도 x y로 잡는 게 훨씬 직관적인 것 같다.

 

function solution(dot) {
    var answer = 0;
    const x = dot[0];
    const y = dot[1];

    if (x > 0 && y > 0) answer = 1
    if (x < 0 && y > 0) answer = 2
    if (x < 0 && y < 0) answer = 3
    if (x > 0 && y < 0) answer = 4

    return answer;
}

 

 

💡2차원으로 만들기

function solution(num_list, n) {
    var answer = [];
    for(let i=0;i<num_list.length;i+=n){
        answer.push(num_list.slice(i, i+n))
    }
    return answer;
}

slice() 메서드를 사용하여 자른 뒤에 다른 배열에 push 해서 합친다.

for문 내부에 i++가 아니라 i+=n이 된다는 것에 주목할 필요가 있다. 


💡주사위 개수

function solution(box, n) {
    const width = box[0];
    const length = box[1];
    const height = box[2];
    let answer = parseInt(width/n) * parseInt(length/n) * parseInt(height/n);
    return answer;
}

let [width, length, height] = box; 를 통해서 구조분해 할당을 사용하면 더 깔끔하게 쓸 수 있다.

 

 

💡최댓값 만들기

function solution(numbers) {
    const list = numbers.sort((a,b)=>a-b);
    const answer = list[list.length-1]*list[list.length-2];
    return answer;
}

sort를 통해서 먼저 배열을 순서대로 정렬한 뒤 가장 큰 두 수를 곱한다. 

sort((a,b)=>b-a); 로 정렬 순서를 바꿨으면 조금 더 보기에 깔끔할 것 같다.

 

 

💡팩토리얼

function fac(n){
        if (n === 0 || n === 1) {
        return 1;
    } else {
        return n * fac(n - 1);
    }
}

function solution(n) {
    let number = 0;
    for (let i=1;i<=n;i++){
        if(fac(i)<=n){
            number = i;
        } else {
            break;
        }
    }
    return number;
}

factorial을 재귀함수로 구하는 함수를 하나 만든 뒤에 풀었다.

다시 보니까 while문을 써도 괜찮았을 것 같다. 

function solution(n) {
    let number = 0;
    while(fac(number)<=n){
        number++;
    }
    return number-1;
}