기초부터 시작하는 코딩/Programmers

Programmers 문제를 풀어봅시다. Day15

kebab00 2023. 5. 31. 22:04

728x90

1. 문자열 정렬하기 (1)

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

- 정답은

function solution(my_string) {
    my_string = my_string.replace(/[a-z]/g, ''); // 영어 소문자를 공백으로 대체
    let answer = new Array(my_string.length); // 새로운 배열 answer 생성
    for (let i = 0; i < my_string.length; i++) {
        answer[i] = parseInt(my_string.charAt(i)); // 새로운 배열에 남은 숫자를 담는다
    }
    answer.sort(function(a, b) { return a - b; }); // 오름차순 정렬
    return answer;
}
  1. my_string 문자열에서 영어 소문자를 공백으로 대체합니다. 이를 위해 replace 메서드와 정규표현식 [a-z] 사용하여 소문자를 찾아 공백으로 대체합니다. replaceAll 메서드는 자바에서 사용되는 메서드이므로, 자바스크립트에서는 replace 메서드와 정규표현식 /[a-z]/g 사용하여 같은 기능을 수행합니다.
  2. answer라는 길이가 my_string.length() 새로운 배열을 생성합니다. 자바에서는 배열의 길이를 지정할 new int[길이] 같이 사용하지만, 자바스크립트에서는 new Array(길이) 같이 사용합니다.
  3. 반복문을 통해 my_string 문자열에서 글자씩 가져와서 answer 배열에 해당 숫자를 저장합니다. charAt(i) 메서드를 사용하여 문자열의 i번째 글자를 가져옵니다. 그리고 parseInt 함수를 사용하여 해당 글자를 숫자로 변환하여 answer 배열에 저장합니다.
  4. answer 배열을 오름차순으로 정렬합니다. 이를 위해 sort 메서드를 사용하고, 정렬 순서를 나타내는 비교 함수 function(a, b) { return a - b; } 제공합니다. 함수는 a b 비교하여 결과에 따라 정렬 순서를 결정합니다. 숫자의 경우, a - b 반환하면 오름차순으로 정렬됩니다.
  5. 최종적으로 정렬된 answer 배열을 반환합니다.

2. 숨어있는 숫자의 덧셈 (1)

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

- 정답은

function solution(my_string) {
    return Array.from(my_string.replace(/[^0-9]/g, ''))
        .map(c => parseInt(c))
        .reduce((a, b) => a + b, 0);
}
  1. my_string에서 숫자를 제외한 모든 문자를 문자열로 대체합니다. 이를 위해 정규표현식 [^0-9] 사용하고, replace 메서드를 활용하여 해당 정규표현식과 일치하는 문자를 문자열로 대체합니다. 자바스크립트에서는 정규표현식을 생성할 /패턴/ 형식을 사용하며, g 플래그는 전역 검색을 의미합니다.
  2. 대체된 문자열을 Array.from 메서드를 사용하여 문자열을 배열로 변환합니다. 그리고 map 메서드를 사용하여 문자를 정수로 변환합니다. parseInt 함수를 활용하여 문자를 정수로 변환합니다.
  3. 변환된 배열의 요소들을 합산하기 위해 reduce 메서드를 사용합니다. 개의 숫자를 더하는 콜백 함수 (a, b) => a + b 제공하고, 초기값으로 0 설정합니다.
  4. 최종적으로 합산된 결과를 반환합니다.

3. 소인수분해

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

- 정답은

function solution(n) {
    const smallNumber = [];
    let idx = 2;
    while (n !== 1) {
        if (n % idx === 0) {
            smallNumber.push(idx);
            n /= idx;
            idx = 2;
        } else {
            idx += 1;
        }
    }
	return Array.from(new Set(smallNumber));
}
  1. smallNumber라는 배열을 선언합니다. 배열은 소인수를 담을 배열입니다.
  2. idx 변수를 2 초기화합니다. 변수는 n 소인수로 나눌 있는지 확인하는 역할을 합니다.
  3. n 1 아닌 동안 반복합니다.
  4. 만약 n idx 나누어 떨어진다면, idx n 소인수입니다. 따라서 smallNumber 배열에 idx 추가합니다.
  5. n idx 나눕니다.
  6. idx 다시 2 초기화하여 다음 소인수를 찾을 준비를 합니다.
  7. 그렇지 않은 경우, idx 1 증가시킵니다. 이렇게 하면 다음 가능한 소인수를 찾아냅니다.
  8. n 1 때까지 위의 과정을 반복합니다.
  9. 마지막으로, smallNumber 배열에서 중복된 값들을 제거하기 위해 Array.from(new Set(smallNumber)) 사용하여 중복을 제거한 배열을 반환합니다.