챌린지/프로그래머스 챌린지

프로그래머스_챌린지_04

Kkan 2023. 1. 8. 10:52
728x90
반응형

58. 369게임

const solution = (order) => {
    let answer = 0;
    let tmpArr = (order + '');
    let removeZero = [...(tmpArr.replaceAll('0', '') + '')];
    
    removeZero.forEach(el => {
        if(el % 3 === 0) {
            answer++;
        }
    })
    
    return answer;
}

 

59. 중복된 문자 제거

const solution = (my_string) => {
    let answer = '';
    let tmpArr = [...my_string];
    
    answer = [... Set(tmpArr)].join('');
    
    return answer;
}

 

60. 팩토리얼

const solution = (n) => {
    let answer = 1;
    
    for(let i = 1; i <= n; i++) {
        answer *= i;
        
        if(answer === n){
            return i;
        }
        
        if(answer > n){
            return i - 1;
        }  
    }
}

 

61. 모스부호(1)

const solution = (letter) => {
    let answer = '';
    let tmpArr = [];

    let morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
    }
    
    letter.split(' ').forEach(el => {
        tmpArr.push(morse[el]);
    })
    
    answer = tmpArr.join('');
    
    return answer;
}

 

62. A로 B만들기

const solution = (before, after) => {
    let answer = 0;
    
    answer = [...before].sort().toString() === [...after].sort().toString() ? 1 : 0;
    
    return answer;
}

 

63. 합성수 만들기

const solution = (n) => {
    let answer = 0;
    
    for(let i = 2; i <= n; i++) {
        if(isCompoNum(i)) {
            answer++;
        }
    }
    return answer;
}

/* 합성수 판별 함수 */
function isCompoNum(num) {
    let count = 0;
    for(let i = 1; i <= Math.sqrt(num); i++) {
        if(num % i === 0) {
            count++;
        }
    }
    
    if(count > 1) {
        return true;
    }
}

 

64. k의 개수

const solution = (i, j, k) => {
    let answer = 0;
    let tmpArr = [];
    let tmpString;
    let regExp = new RegExp(`[^${k}]`, 'gi');
    
    for(let a = i; a <= j; a++) {
        tmpArr.push(a);
    }
    
    answer = tmpArr.join('').replace(regExp,'').length;
    
    return answer;
}

/* 더 좋은 풀이방법을 모색해봐야겠다.  */

 

65. 가까운 수

const solution = (array, n) => {
    let answer = 0;
    let tmpArr = [];
    let sortArr = array.sort((a, b) => a - b);
    
    for(let i = 0; i < sortArr.length; i++) {
        tmpArr.push(Math.abs(sortArr[i] - n));
    }

    let minNum = Math.min(...tmpArr);
    answer = sortArr[tmpArr.indexOf(minNum)];

    return answer;
}

 

66. 진료순서 정하기

 

66-1. 첫번째 풀이

const solution = (emergency) => {
    let answer = [];
    let tmpArr = JSON.parse(JSON.stringify(emergency)).sort((a, b) => b - a);
    let tmpObj = {};

    for(let key in tmpArr) {
        tmpObj[key] = tmpArr[key];
    } 
    
    for(let i = 0; i < emergency.length; i++) {
        for(let j = 0; j < emergency.length; j++) {
            if(emergency[i] === tmpObj[j]) {
                answer.push(j + 1)
            }
        }
    }

    return answer;
}

66-2. 두번째 풀이

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

    return answer;
}

==> 처음 풀이 당시 마구잡이로 풀었는데, 블로그에 올리려고 보니 이중for문에 심지어 if문까지.. 과거의 내 생각이 너무 바보같아 바꿨다..

 

67. 한 번만 등장한 문자

const solution = (s) => {
    let answer = '';
    let tmpArr = [...s];
    let answerArr = [];
    
    for(let i = 0; i < s.length; i++) {
        if(s.indexOf(s[i]) === s.lastIndexOf(s[i])) {
            answerArr.push(s[i]);
        };
    };
    
    answer = answerArr.sort().join('');
    
    return answer;
}
728x90
반응형