Post

알고리즘 문제 간단 정리 04

알고리즘 04

알고리즘 간단 정리 네번째 글입니다.

1. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
        function solution(numbers) {
                var answer = [];
                for(let a = 0; a < numbers.length-1; a++) {
                        for(let b = a+1; b < numbers.length; b++) {
                        const sum = numbers[a] + numbers[b];
                        if(answer.indexOf(sum) < 0) {
                        answer.push(sum);
                        }
                        }
                }
                answer.sort((a, b) => a - b);
                return answer;
        }
}

이 함수는 주어진 배열에서 서로 다른 인덱스에 있는 두 수를 더한 결과를 중복되지 않게 반환하는 것입니다.

  1. 먼저, 빈 배열 answer를 선언합니다.
  2. 이중 반복문을 사용하여 배열 numbers의 각 요소들을 서로 다른 조합으로 더합니다.
    • 외부 반복문은 배열의 첫 번째 요소부터 마지막에서 두 번째 요소까지 순회합니다.
    • 내부 반복문은 외부 반복문의 다음 요소부터 마지막 요소까지 순회합니다.
  3. 두 수를 더한 결과를 sum 변수에 저장합니다.
  4. answer 배열에 중복되지 않는 합을 추가합니다. 중복을 체크하기 위해 indexOf() 메서드를 사용합니다.
    • 만약 sumanswer 배열에 없다면(indexOf()의 결과가 음수라면) answer 배열에 추가합니다.
  5. answer 배열을 오름차순으로 정렬합니다.
  6. 정렬된 answer 배열을 반환합니다.

이 함수는 배열의 각 요소들을 조합하여 더한 결과를 중복되지 않게 반환하는 것으로, 중복된 합을 제외하고 모든 합을 반환합니다.

2. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
6
{
        function solution(arr) {
                arr.splice(arr.findIndex((a) => a == Math.min(...arr)), 1);
                return arr.length < 0 ? arr = [-1] : arr;
        }
}

이 함수는 배열 arr에서 가장 작은 값을 제거하는 것입니다.

  1. Math.min(...arr)을 사용하여 배열 arr에서 가장 작은 값을 찾습니다.
  2. findIndex() 메서드를 사용하여 가장 작은 값의 인덱스를 찾습니다.
  3. splice() 메서드를 사용하여 해당 인덱스의 요소를 배열에서 제거합니다.
    • splice() 메서드는 첫 번째 매개변수로부터 시작하여 두 번째 매개변수만큼의 요소를 제거합니다. 이 경우에는 인덱스를 지정하여 해당 요소를 제거합니다.
  4. 만약 배열 arr의 길이가 0보다 작다면(즉, 배열이 비어있다면), -1을 요소로 갖는 배열을 반환합니다. 그렇지 않으면 배열 arr을 그대로 반환합니다.

이 함수는 주어진 배열에서 가장 작은 값을 제거한 배열을 반환하며, 만약 배열이 비어있다면 -1을 요소로 갖는 배열을 반환합니다.

3. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
6
7
8
9
10
{
        function solution(phone_number){
                return "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
        }
        
        // 정규식 표현
        function solution(phone_number) {
                return phone_number.replace(/\d(?=\d{4})/g, "*");
        }
}

이 함수는 배열 arr에서 가장 작은 값을 제거하는 것입니다.

  1. Math.min(...arr)을 사용하여 배열 arr에서 가장 작은 값을 찾습니다.
  2. findIndex() 메서드를 사용하여 가장 작은 값의 인덱스를 찾습니다.
  3. splice() 메서드를 사용하여 해당 인덱스의 요소를 배열에서 제거합니다.
    • splice() 메서드는 첫 번째 매개변수로부터 시작하여 두 번째 매개변수만큼의 요소를 제거합니다. 이 경우에는 인덱스를 지정하여 해당 요소를 제거합니다.
  4. 만약 배열 arr의 길이가 0보다 작다면(즉, 배열이 비어있다면), -1을 요소로 갖는 배열을 반환합니다. 그렇지 않으면 배열 arr을 그대로 반환합니다.

이 함수는 주어진 배열에서 가장 작은 값을 제거한 배열을 반환하며, 만약 배열이 비어있다면 -1을 요소로 갖는 배열을 반환합니다.

4. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
{
        function solution(arr) {
                return arr.reduce((acc, cur) => acc + cur) / arr.length;
        }
}

이 함수는 주어진 배열 arr의 평균값을 계산하는 것입니다.

  1. reduce() 메서드를 사용하여 배열의 모든 요소를 더합니다.
    • acc는 누적값을 의미하며, 초기값은 생략되었으므로 배열의 첫 번째 요소부터 시작합니다.
    • cur은 현재 요소를 의미합니다.
  2. 더한 값에 배열의 길이(arr.length)를 나누어 평균값을 계산합니다.
  3. 평균값을 반환합니다.

이 함수는 주어진 배열의 모든 요소를 더한 후 배열의 길이로 나눈 평균값을 반환합니다.

5. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
{
        function solution(n) {
                return String(n).split('').map((x) => Number(x)).reverse();
        }
}

이 함수는 주어진 숫자 n을 문자열로 변환한 후 각 자리의 숫자를 배열로 만들고, 이 배열을 뒤집어 반환하는 것입니다.

  1. String(n)을 사용하여 숫자 n을 문자열로 변환합니다.
  2. split('') 메서드를 사용하여 문자열을 각 자리의 숫자로 나눕니다. 이렇게 하면 각 자리의 숫자가 요소로 포함된 배열이 생성됩니다.
  3. map((x) => Number(x))를 사용하여 각 요소를 숫자로 변환합니다. 이는 문자열로 나누어진 각 자리의 숫자가 여전히 문자열 형태이기 때문에 숫자로 변환해야 합니다.
  4. reverse() 메서드를 사용하여 배열을 뒤집습니다.
  5. 뒤집은 배열을 반환합니다.

이 함수는 주어진 숫자를 각 자리의 숫자가 뒤집힌 순서로 배열로 반환합니다.

6. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
6
7
8
9
10
11
12
{
        function solution(s) {
        let arr = s.split(' ');
        let result = [];for(let i = 0; i < arr.length; i++) {
                let words = arr[i].split('').map((word, idx) => {
                        return (idx % 2) ? word : word.toUpperCase();
                        }).join('');
                        result.push(words);
                }
                return result.join(' ');
        }
}

이 함수는 주어진 문자열 s를 단어 단위로 나눈 후, 각 단어의 짝수 인덱스에 있는 문자를 대문자로 변환하고 홀수 인덱스에 있는 문자를 소문자로 변환하는 것입니다.

  1. split(' ') 메서드를 사용하여 주어진 문자열 s를 공백을 기준으로 나눕니다. 이렇게 하면 각 단어가 요소로 포함된 배열 arr이 생성됩니다.
  2. for 반복문을 사용하여 배열 arr의 각 요소에 대해 다음 작업을 수행합니다.
    • split('') 메서드를 사용하여 현재 단어를 각 문자로 분할합니다.
    • map() 메서드를 사용하여 각 문자에 대해 다음 작업을 수행합니다.
      • 현재 문자의 인덱스가 짝수인 경우(idx % 2 === 0), 해당 문자를 대문자로 변환합니다.
      • 현재 문자의 인덱스가 홀수인 경우(idx % 2 === 1), 해당 문자를 소문자로 변환합니다.
    • join('') 메서드를 사용하여 변환된 문자들을 다시 하나의 단어로 합칩니다.
    • 변환된 단어를 result 배열에 추가합니다.
  3. join(' ') 메서드를 사용하여 result 배열의 요소들을 공백으로 연결하여 하나의 문자열로 반환합니다.

이 함수는 주어진 문자열에서 각 단어의 짝수 인덱스에 있는 문자를 대문자로 변환하고 홀수 인덱스에 있는 문자를 소문자로 변환한 문자열을 반환합니다.

7. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
{
        function solution(num) {
                return (num % 2) ? "Odd" : "Even";
        }
}

이 함수는 주어진 숫자 num이 홀수인지 짝수인지를 판별하여 “Odd” 또는 “Even”을 반환하는 것입니다.

  1. 주어진 숫자 num을 2로 나눈 나머지를 계산합니다. 이를 통해 숫자가 홀수인지 짝수인지를 판별합니다.
    • 만약 나머지가 0이라면, 주어진 숫자는 짝수입니다. 이때는 "Even"을 반환합니다.
    • 나머지가 0이 아니라면, 주어진 숫자는 홀수입니다. 이때는 "Odd"를 반환합니다.

이 함수는 주어진 숫자가 홀수인지 짝수인지를 판별하여 이에 해당하는 문자열을 반환합니다.

8. 다음을 보고 결괏값을 작성하시오!

1
2
3
4
5
{
        function solution(n) {
                return (n+'').split('').reduce((acc, cur) => acc + Number(cur), 0);
        }
}

이 함수는 주어진 숫자 n의 각 자리 숫자를 더하는 것입니다.

  1. (n+'')를 사용하여 주어진 숫자 n을 문자열로 변환합니다.
  2. split('') 메서드를 사용하여 문자열을 각 자리의 숫자로 나눕니다. 이렇게 하면 각 자리의 숫자가 요소로 포함된 배열이 생성됩니다.
  3. reduce() 메서드를 사용하여 배열의 각 요소를 순회하면서 누적값을 계산합니다.
    • 초기값은 0으로 설정합니다.
    • 각 요소를 숫자로 변환하여 누적값에 더합니다.
  4. 누적값을 반환합니다.

이 함수는 주어진 숫자의 각 자리 숫자를 모두 더한 값을 반환합니다.

이렇게 오늘도 8개정도 정리를 해봤습니다. 오늘도 필자의 부족한 글 읽어주셔서 감사합니다.

This post is licensed under CC BY 4.0 by the author.