프로그래머스

프로그래머스 15일차

ture403 2023. 5. 31. 23:08

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

합성수 찾기

문제

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

 

정답풀이

function solution(n) {
    let result = 0;
 
    // 소수 찾기
    function isPrime(n) {
        for (let i = 2; i <= Math.sqrt(n); i++) {
            if (n % i === 0) return true;
        }
        return false
    }
    
    for(let i = 0; i <= n; i++){
        if(isPrime(i)) result++;
    }
    
    return result;
}

먼저, isPrime이라는 내부 함수를 선언합니다. 이 함수는 주어진 숫자 n이 소수인지 판별하기 위해 사용됩니다. isPrime 함수는 주어진 숫자 n을 2부터 n의 제곱근까지의 숫자로 나누어보고 나머지가 0인 경우를 확인합니다. 나누어떨어지는 경우, n은 소수가 아니므로 true를 반환합니다. 그렇지 않은 경우, n은 소수이므로 false를 반환합니다.

result 변수를 0으로 초기화합니다.

for 반복문을 사용하여 0부터 n까지의 숫자를 순회합니다. 각 숫자 i에 대해 isPrime 함수를 호출하여 true가 반환되면 result를 증가시킵니다. 즉, 소수인 경우에만 result를 증가시킵니다.

반복문이 모두 실행된 후, result 값을 반환합니다. 이 값은 0부터 n까지의 소수의 개수를 나타냅니다.

예를 들어, n이 10인 경우, 10까지의 소수는 2, 3, 5, 7이므로 result는 4가 반환됩니다.

 

중복된 문자 제거

문제

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

문제풀이

function solution(my_string) {
    const stringArr = my_string.split("");
    
    const noOverlay = Array.from(new Set(stringArr));
    
    return noOverlay.join("");
}

 

함수는 my_string을 split("") 메서드를 사용하여 각 문자를 배열로 분리합니다. 그리고 Array.from()과 new Set()을 사용하여 배열에서 중복된 값들을 제거합니다. 이렇게 중복이 제거된 배열을 noOverlay 변수에 할당합니다.

마지막으로, noOverlay 배열을 join("") 메서드를 사용하여 하나의 문자열로 결합하여 반환합니다.

이 함수는 문자열에서 중복된 문자들을 제거하여 반환하는 기능을 수행합니다.

예를 들어, my_string이 "hello"인 경우, 문자열 "hello"가 배열로 분리되어 ["h", "e", "l", "l", "o"]가 됩니다. 중복된 문자 "l"은 제거되고, ["h", "e", "l", "o"]가 noOverlay 배열에 할당됩니다. 마지막으로, 배열을 문자열로 결합하여 "helo"가 반환됩니다.

모스부호 (1)

문제

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

정답풀이

function solution(letter) {
    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'
    }

    var answer = '';
    let morseValue= Object.keys(morse);
    let result = letter.split(' ')
     for(let x of result){
         answer+=morse[morseValue.find(e=> e===x)]
     }
     return answer;

}

함수는 주어진 문자열 letter를 모스 부호로 변환하는 기능을 수행합니다. 변환에 사용되는 모스 부호는 morse 객체에 저장되어 있습니다.

먼저, morse 객체는 알파벳에 대응하는 모스 부호를 키-값 쌍으로 가지고 있습니다.

answer 변수를 빈 문자열로 초기화합니다.

letter를 공백을 기준으로 분리하여 배열로 만듭니다. 그리고 result 변수에 할당합니다.

for...of 반복문을 사용하여 result 배열의 각 요소 x에 대해서 다음 작업을 수행합니다.

morseValue 변수에 morse 객체의 키들을 배열로 저장합니다.

morseValue.find() 메서드를 사용하여 x와 일치하는 모스 부호의 키를 찾습니다.

morse 객체에서 해당 키에 대응하는 알파벳을 answer에 추가합니다.

반복문이 종료되면 answer를 반환합니다. 이는 주어진 문자열 letter를 모스 부호로 변환한 결과를 나타냅니다.

예를 들어, letter가 ".- -... -.-."인 경우, 이는 "abc"를 나타내는 모스 부호입니다. 따라서 answer는 "abc"가 되어 반환됩니다.

 

2차원으로 만들기

문제

정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

정답풀이

function solution(num_list, n) {
    let result = [];
    
    for(let i = 0; i < num_list.length / n; i++){
        result = [...result, num_list.slice(i * n, i * n + n)];
    }
    
    return result;
}

함수는 num_list 배열을 n개씩 잘라서 그룹화하는 기능을 수행합니다. 결과는 2차원 배열인 result에 저장됩니다.

먼저, result 변수를 빈 배열로 초기화합니다.

for 반복문을 사용하여 i를 0부터 num_list.length / n까지 증가시키면서 다음 작업을 수행합니다.

num_list 배열을 slice 메서드를 사용하여 i * n부터 i * n + n까지의 부분 배열을 추출합니다.

부분 배열을 result 배열에 추가하기 위해 전개 연산자(...)를 사용하여 두 배열을 병합합니다.

반복문이 종료되면 result를 반환합니다. 이는 num_list 배열을 n개씩 잘라서 그룹화한 결과를 2차원 배열로 표현한 것입니다.

예를 들어, num_list가 [1, 2, 3, 4, 5, 6]이고 n이 2인 경우, num_list를 2개씩 잘라서 그룹화하면 [[1, 2], [3, 4], [5, 6]]이 됩니다. 따라서 result는 [[1, 2], [3, 4], [5, 6]]가 되어 반환됩니다.