Post

알고리즘 문제 간단 정리 03

알고리즘 03

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

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

1
2
3
4
5
6
7
8
9
10
{
        function solution(a, b, c) {
                if (a < b) answer = a;
                else answer = b;
                if (c < answer) answer = c;
                return answer;
        }

        console.log(solution(2, 5, 1));
}

주어진 함수는 세 개의 숫자 중 가장 작은 값을 반환합니다.

  1. 먼저, 변수 answer를 선언합니다.
  2. if (a < b)를 통해 a가 b보다 작으면 answer에 a를 할당하고, 그렇지 않으면 b를 할당합니다.
  3. 그 후, if (c < answer)를 통해 c가 answer보다 작으면 answer에 c를 할당합니다.
  4. 마지막으로 answer를 반환합니다.

따라서 console.log(solution(2, 5, 1));을 호출하면 1이 반환됩니다. 왜냐하면 1이 세 숫자 중 가장 작기 때문입니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
        function solution(a, b, c) {
                let answer = "YES",
                  max;
                let sum = a + b + c;
                if (a > b) max = a;
                else max = b;
                if (c > max) max = c;
                if (sum - max <= max) answer = "NO";

                return answer;
        }
        console.log(solution(13, 33, 17));
}

위의 코드는 세 변의 길이를 입력받아 삼각형이 만들어질 수 있는지를 판별하는 함수입니다.

  1. answer 변수를 “YES”로 초기화합니다.
  2. 세 변의 길이를 합하여 sum 변수에 저장합니다.
  3. 가장 긴 변을 찾기 위해 a, b, c 중 가장 큰 값을 max 변수에 할당합니다.
  4. 가장 긴 변을 제외한 나머지 두 변의 길이의 합이 가장 긴 변의 길이보다 크지 않다면, 삼각형이 만들어질 수 없으므로 answer를 “NO”로 변경합니다.
  5. 최종적으로 answer 값을 반환합니다.

console.log(solution(13, 33, 17));을 호출하면 13, 33, 17이 세 변의 길이로 주어지고, 이들을 가지고 만들 수 있는 삼각형을 판별합니다. 이 경우 가장 긴 변은 33이며, 나머지 두 변의 길이의 합은 30입니다. 이 값은 가장 긴 변의 길이보다 크므로 삼각형을 만들 수 없습니다. 따라서 함수는 “NO”를 반환합니다.

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

1
2
3
4
5
6
7
8
9
{
        function solution(n) {
                let answer;
                answer = Math.ceil(n / 12);
                return answer;
        }
        console.log(solution(25));
        console.log(solution(178));
}

주어진 함수는 입력된 값 n을 12로 나눈 후 올림하여 반환하는 코드입니다.

  1. 먼저, answer 변수를 선언합니다.
  2. 입력된 값 n을 12로 나눈 결과를 Math.ceil() 함수를 사용하여 올림합니다. 이 값을 answer에 할당합니다.
  3. 최종적으로 answer 값을 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
2
console.log(solution(25)); // 출력 결과: 3
console.log(solution(178)); // 출력 결과: 15

첫 번째 호출에서는 25를 12로 나눈 결과를 올림하여 3을 반환합니다. 이는 25개의 아이템을 12개씩 담는다고 가정할 때 필요한 세트의 수를 의미합니다.

두 번째 호출에서는 178을 12로 나눈 결과를 올림하여 15를 반환합니다. 이는 178개의 아이템을 12개씩 담는다고 가정할 때 필요한 세트의 수를 의미합니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
{
        function solution(n) {
                let answer = 0;
                for(let i =1; i <=n; i++){
                    answer += 1;
                }

                return answer;
        }
        console.log(solution(10));
        console.log(solution(6));
}

주어진 코드는 1부터 입력된 값 n까지의 모든 정수를 더하는 함수입니다.

  1. answer 변수를 0으로 초기화합니다.
  2. for 반복문을 사용하여 1부터 n까지의 정수를 i로 순회합니다.
  3. 각 반복마다 answer에 1씩 더합니다.
  4. 최종적으로 answer 값을 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
2
console.log(solution(10)); // 1부터 10까지의 합인 55를 출력합니다.
console.log(solution(6));  // 1부터 6까지의 합인 21을 출력합니다.

따라서 첫 번째 호출에서는 1부터 10까지의 모든 정수를 더한 결과인 55가 반환되며, 두 번째 호출에서는 1부터 6까지의 모든 정수를 더한 결과인 21이 반환됩니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
{
        function solution(arr) {
                let answer,
                min = Number.MAX_SAFE_INTEGER; //arr[0]
                for (let i = 0; i < arr.length; i++) {
                        if (arr[i] < min) min = arr[i];
                }
                answer = min;
                return answer;
        }
        console.log(solution([5, 3, 7, 11, 2, 15, 17]));
}

주어진 함수는 주어진 배열에서 가장 작은 값을 찾아 반환하는 것입니다.

  1. answermin 변수를 선언합니다. min 변수를 Number.MAX_SAFE_INTEGER로 초기화합니다.
  2. 배열 arr을 순회하면서 각 요소가 min보다 작으면 min 값을 해당 요소의 값으로 갱신합니다.
  3. 모든 요소를 확인한 후에는 min 값을 answer에 할당합니다.
  4. answer를 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
console.log(solution([5, 3, 7, 11, 2, 15, 17])); // 출력 결과: 2

주어진 배열 [5, 3, 7, 11, 2, 15, 17]에서 가장 작은 값은 2이므로, 이 값이 반환됩니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
        function solution(arr) {
                let answer = [];
                let sum = 0,
                min = Number.MAX_SAFE_INTEGER;
                for (let x of arr) {
                        if (x % 2 === 1) {
                                sum += x;
                                if (x < min) min = x;
                        }
                }
                answer.push(sum);
                answer.push(min);
                return answer;
        }
        arr = [12, 77, 38, 41, 53, 92, 85];
        console.log(solution(arr));
}

이 함수는 주어진 배열에서 홀수인 요소들의 합과 홀수 중에서 가장 작은 값을 반환합니다.

  1. answer 배열을 선언합니다.
  2. sum 변수를 선언하고 0으로 초기화하고, min 변수를 Number.MAX_SAFE_INTEGER로 초기화합니다.
  3. 배열 arr을 순회하면서 각 요소 x가 홀수인지 확인합니다.
  4. 홀수인 경우 sum에 더하고, 현재 요소가 min보다 작으면 min 값을 해당 요소의 값으로 갱신합니다.
  5. 반복문을 마치고 나면, summin 값을 answer 배열에 추가합니다.
  6. answer 배열을 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
console.log(solution([12, 77, 38, 41, 53, 92, 85])); // 출력 결과: [256, 41]

주어진 배열 [12, 77, 38, 41, 53, 92, 85]에서 홀수인 요소들의 합은 256이고, 홀수 중에서 가장 작은 값은 41입니다. 따라서 [256, 41]이 반환됩니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
{
        function solution(day, arr) {
                let answer = 0;
                for (let x of arr) {
                        if (x % 10 === day) answer++;
                }

                return answer;
        }
        arr = [25, 23, 11, 47, 53, 17, 33];
        console.log(solution(3, arr));
        console.log(solution(0, [12, 20, 54, 30, 87, 91, 30]));
}

이 함수는 배열 arr에서 각 요소의 일의 자리가 주어진 day와 일치하는 경우를 세는 것입니다.

  1. answer 변수를 0으로 초기화합니다.
  2. 배열 arr을 순회하면서 각 요소 x의 일의 자리가 주어진 day와 일치하는지 확인합니다.
  3. 일의 자리가 day와 일치하는 경우 answer를 증가시킵니다.
  4. 모든 요소를 확인한 후에는 answer 값을 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
2
console.log(solution(3, [25, 23, 11, 47, 53, 17, 33])); // 출력 결과: 3
console.log(solution(0, [12, 20, 54, 30, 87, 91, 30])); // 출력 결과: 3

첫 번째 호출에서는 배열 [25, 23, 11, 47, 53, 17, 33]에서 일의 자리가 3인 요소가 3개 있으므로 결과는 3입니다.

두 번째 호출에서는 배열 [12, 20, 54, 30, 87, 91, 30]에서 일의 자리가 0인 요소가 3개 있으므로 결과는 3입니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
        function solution(arr) {
                let answer = arr;
                let sum = arr.reduce((a, b) => a + b, 0);
                for (let i = 0; i < 8; i++) {
                        for (let j = i + 1; j < 9; j++) {
                                if (sum - (arr[i] + arr[j]) === 100) {
                                        arr.splice(j, 1);
                                        arr.splice(i, 1);
                                }
                        }
                }
                return answer;
      }

      let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
      console.log(solution(arr));
}

이 함수는 주어진 배열에서 두 요소를 제거하여 합이 100이 되도록 하는 것입니다.

  1. 먼저, answer 변수를 주어진 배열 arr로 초기화합니다.
  2. 배열 arr의 모든 요소를 합하여 sum 변수에 저장합니다.
  3. 두 개의 중첩된 for 반복문을 사용하여 배열에서 두 요소의 합이 100이 되는 조합을 찾습니다.
  4. 조건을 만족하는 경우, splice() 메서드를 사용하여 배열에서 해당 요소를 제거합니다.
  5. 변경된 배열을 반환합니다.

위 함수를 호출한 결과는 다음과 같습니다:

1
console.log(solution([20, 7, 23, 19, 10, 15, 25, 8, 13])); // 출력 결과: [20, 7, 23, 19, 10, 8, 13]

주어진 배열 [20, 7, 23, 19, 10, 15, 25, 8, 13]에서 두 요소를 제거하여 합이 100이 되도록 하는 조합은 [20, 7, 23, 19, 10, 8, 13]입니다. 따라서 이 배열이 반환됩니다.

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

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