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. answer와 min 변수를 선언합니다. 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. 반복문을 마치고 나면, sum과 min 값을 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.