웹/JavaScript

[코딩 테스트] 프로그래머스 JS 연습 - 가위바위보, 인덱스 바꾸기, 모스부호(1), 영어가 싫어요, 7의 개수

Judith Hopps 2023. 1. 18. 17:53
반응형

1. 가위바위보

문제 설명

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

function solution(rsp) {
    var obj = {
        "0" : 5,
        "2" : 0,
        "5" : 2
    }
    return rsp.split('').map(x => obj[x]).join('')
}

객체는 obj[key] = value 라는 것을 이용해서 rsp를 split한 후 map 메소드를 이용하였다.

 

2. 인덱스 바꾸기

문제 설명

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

 

function solution(my_string, num1, num2) {
    var arr = my_string.split('');
    [ arr[num1] , arr[num2] ] = [ arr[num2] , arr[num1]];
    return arr.join('');
}

string은 인덱스로 문자를 바꿀 수 없으니 배열에 저장하여 디스트럭처링을 이용하였다.

 

3. 합성수 찾기

문제 설명

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    var answer = 0;
    for (let i = 4; i <=n ; i++) {
        var sum = 0
        for (let j = 2; j <i; j++) {
            if (i % j === 0) sum +=1
        }
        answer += sum > 0 ? 1 : 0
    }
    return answer;
}

알고리즘으로 시간이 많이 걸린 문제였다. 하지만 for문에서 비효율적이다.

j <= Math.sqrt(i)로 바꾸는 것이 좋다.

 

4. 모스부호

 

문제 설명

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.

function solution(letter) {
    const 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'
}
    return letter.split(" ").map(v => morse[v]).join('')
    
}

 

모스부호를 객체로 만든 후 obj[key] = value를 이용한다.

 

5. 영어가 싫어요

 

문제 설명

머쓱이

function solution(numbers) {
    var answer = numbers
    var str = {
        "zero" : 0,
        "one" : 1,
        "two" : 2,
        "three" :3, 
        "four" : 4, 
        "five" : 5, 
        "six" : 6, 
        "seven" : 7, 
        "eight" : 8, 
        "nine" : 9
 }
    for (let s in str) {
       answer= answer.replaceAll(s,str[s])
    }
   return answer * 1
}

 for문을 str 객체의 키값으로 for문 돌린 후 전제 replace한다. 

이때, 문자열로 나오므로 숫자형으로 전환이 필요하다.

 

+) 7의 개수

문제 설명

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

 

function solution(array) {
    var answer = 0;
    for (let s of array) {
        answer+= s.toString().split('').filter(x => x === "7").length
    }
    return answer;
}

위에는 직접 푼 코드이고, 

function solution(array) {
    return array.join('').split('7').length-1;
}

이것은 베스트 답안이다.

 

+) max

 

Math.max(a,b)

 

+) 정수확인

Number.isInteger(a)

 

+) 문자열 찾기

str.match(/[3|6|9]/g)

 

+) string

sort 제공 안함. arr에서 제공함

 

 

 

반응형