Post

알고리즘 문제 간단 정리 01

알고리즘 01

알고리즘 공부를 시작하면서 간단하게 10개씩 정리해서 올려보려고 합니다.

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

1
2
3
4
5
6
7
8
9
10
11
{
        function func(){
            let a = [];
    
            for(i=1; i<=5; i++){
                a += [i];
            }
            console.log(a);
        }
        func();
} 

주어진 코드에서 함수 func()는 배열 a에 1부터 5까지의 숫자를 추가하려는 것 같습니다. 그러나 a += [i]의 형태는 배열을 문자열로 변환하여 추가하는 것이므로 예상과 다른 결과를 초래할 것입니다. 따라서 코드를 실행하면 다음과 같은 결과가 나올 것입니다:

1
"12345"

따라서 결괏값은 문자열 "12345"가 될 것입니다.

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

1
2
3
4
5
6
7
8
9
10
11
{
        const arr = [100, 200, 300, 400, 500];

        const text1 = arr.join("*");
        const text3 = arr.join("");
        const text4 = arr.join(" ");
    
        console.log(text1);
        console.log(text3);
        console.log(text4);
} 

주어진 코드는 배열 arr의 요소들을 문자열로 결합하는 것을 보여줍니다. 각각의 join() 메서드 호출은 배열의 요소들을 결합하는 방식을 다르게 설정하고 있습니다.

  1. text1은 배열의 요소들을 “*” 문자로 구분하여 결합합니다.
  2. text3은 배열의 요소들을 구분 없이 연이어서 결합합니다.
  3. text4는 배열의 요소들을 공백으로 구분하여 결합합니다.

따라서 각각의 결과는 다음과 같을 것입니다:

1
2
3
100*200*300*400*500
100200300400500
100 200 300 400 500

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

1
2
3
4
5
6
7
8
9
{
        let a, b = 10;

        for(let i=0; i<5; i++){
            a = i;
            b -= a;
        }
        console.log(a, b)
}
  1. 초기에 ab를 선언하지만, b에는 초기값을 명시했고 a는 그렇지 않았습니다. 이 경우 aundefined가 됩니다.
  2. 반복문에서는 ai로 설정하고, b에서 a를 빼는 연산을 수행합니다.
  3. 반복문이 0부터 4까지 실행되므로 a에는 0부터 4까지의 값이 들어가고, b는 초기값인 10에서 a가 빠져나가는 값이 누적됩니다.

결과적으로 마지막 반복에서 b에 누적된 값이 출력될 것입니다. 따라서 결과는 (4, 0)이 됩니다.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
{
        function func(){
            let i = 20, j = 20, k = 30;
            i /= j;
            j -= i;
            k %= j;
    
            console.log(i);
            console.log(j);
            console.log(k);
        }
        func();
}

주어진 함수 func()는 다음과 같은 동작을 수행합니다:

  1. i에 20을 할당합니다.
  2. j에 20을 할당합니다.
  3. k에 30을 할당합니다.
  4. ij로 나누고 그 값을 다시 i에 할당합니다. 즉, i는 1이 됩니다.
  5. j에서 i를 뺀 값을 j에 할당합니다. 즉, j는 19가 됩니다.
  6. kj로 나눈 나머지 값을 k에 할당합니다. 이때, 나누기 연산에서 나머지는 11이 되므로 k는 11이 됩니다.

따라서 console.log()에 의해 출력되는 값은 다음과 같을 것입니다:

1
2
3
1
19
11

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

1
2
3
4
5
6
7
8
9
{       
        let k = 1;
        let temp;
        for(let i=0; i<=3; i++){
                temp = k;
                k++;
                console.log(temp + "");
        }    
}

주어진 코드는 반복문을 사용하여 변수 k를 증가시키면서 출력하는 것으로 보입니다.

  1. 초기에 변수 k에 1을 할당합니다.
  2. 반복문을 사용하여 i가 0부터 3까지 증가하면서 반복합니다.
  3. 각 반복에서 temp에 현재 k의 값을 할당하고, k를 1 증가시킵니다.
  4. temp와 “번” 문자열을 결합하여 출력합니다.

따라서 출력 결과는 다음과 같을 것입니다:

1
2
3
4
1번
2번
3번
4번

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

1
2
3
4
5
6
7
8
{
        let num1 = 3;
        let num2 = 7;
        if(++num1 > 5 || num2++ < 1){
                console.log(num1);
        }
        console.log(num2)
}

주어진 코드는 조건문을 사용하여 변수 num1num2를 조작하고 출력하는 것으로 보입니다.

  1. num1에 3을 할당합니다.
  2. num2에 7을 할당합니다.
  3. 조건문을 평가합니다. ++num1은 선 증가 연산자를 사용하여 num1을 1 증가시키고, 그 값을 평가합니다. 따라서 num1은 4가 됩니다. 또한 num2++은 후 증가 연산자를 사용하여 num2의 현재 값을 평가한 후에 1을 증가시킵니다. 하지만 이 부분은 조건문에서 사용되지 않으므로 그대로 7의 값을 가집니다.
  4. 첫 번째 조건인 ++num1 > 5는 참이므로 다음 문장이 실행됩니다. console.log(num1)이 실행되어 num1의 값인 4가 출력됩니다.
  5. 두 번째 console.log(num2)는 조건문과 관계없이 실행됩니다. num2의 값은 후 증가 연산자 때문에 이미 1이 증가되었으므로 8이 출력됩니다.

따라서 출력 결과는 다음과 같을 것입니다:

1
2
4
8

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

1
2
3
4
5
6
7
8
{
        let num = [1, 5, 1, 2, 7, 5];
        for(let i=0; i<6; i++){
                if((i+2) % 2 == 0){
                        console.log(num[i]);
                }
        }
}

주어진 코드는 배열 num의 요소를 반복하면서 특정 조건을 만족하는 요소만 출력하는 것으로 보입니다.

  1. 반복문을 사용하여 i가 0부터 5까지 증가하면서 반복합니다.
  2. 각 반복에서 (i+2) % 2를 계산합니다. (i+2)는 2부터 7까지의 값이 되므로 이를 2로 나누면 홀수 인덱스(1, 3, 5, 7, 9)는 1이 되고, 짝수 인덱스(2, 4, 6, 8, 10)는 0이 됩니다.
  3. 따라서 짝수 인덱스에 해당하는 요소만 조건문을 통과하여 출력됩니다.

주어진 배열에서 짝수 인덱스에 해당하는 요소는 0부터 시작하여 두 칸씩 이동하면 됩니다. 따라서 출력 결과는 다음과 같을 것입니다:

1
2
3
5
2
5

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

1
2
3
4
5
6
7
8
9
10
11
12
13
{
        let num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

        for(let i=0; i<=9; i++){
                switch(num[i] % 2){
                        case 1:
                            console.log(num[i]);
                            break;
                        default:
                            console.log("*");
                }
        }
}

주어진 코드는 배열 num의 각 요소를 반복하면서 홀수인 경우에는 해당 숫자를 출력하고, 짝수인 경우에는 “*“를 출력하는 것으로 보입니다.

  1. 반복문을 사용하여 i가 0부터 9까지 증가하면서 반복합니다.
  2. 각 반복에서 num[i] % 2를 계산하여 해당 요소가 홀수인지 짝수인지 판별합니다.
  3. 홀수인 경우 case 1이 실행되어 해당 숫자를 출력합니다.
  4. 짝수인 경우 default 블록이 실행되어 “*“를 출력합니다.

따라서 출력 결과는 다음과 같을 것입니다:

1
2
3
4
5
6
7
8
9
10
*
1
*
3
*
5
*
7
*
9

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

1
2
3
4
5
6
7
8
9
10
11
{
        let cnt = 0;
        let sum = 0;
        for(let i=0; i<=7; i++){
                if(i%2 == 1){
                        cnt++;
                        sum += i;
                }
        }
        console.log(cnt + ", "+sum/2);
}

주어진 코드는 0부터 7까지의 숫자 중 홀수인 숫자의 개수와 그 합의 절반을 출력하는 것으로 보입니다.

  1. cntsum 변수를 각각 0으로 초기화합니다.
  2. 반복문을 사용하여 i가 0부터 7까지 증가하면서 반복합니다.
  3. 각 반복에서 i가 홀수인지 확인합니다. 홀수인 경우 i%2가 1이 되므로 조건문이 참이 됩니다.
  4. 홀수인 경우에는 cnt를 1 증가시키고, sum에 현재 홀수인 i를 더합니다.
  5. 반복이 끝나면 홀수의 개수인 cnt와 홀수의 합인 sum의 절반을 출력합니다.

따라서 출력 결과는 다음과 같을 것입니다:

1
4, 8

홀수의 개수는 4이고, 홀수의 합은 16이므로 절반은 8이 됩니다.

  1. 다음을 보고 결괏값을 작성하시오!
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    {
        let a=1, b=1, num;
    
        for(let i=0; i<6; i++){
            num = a + b;
            a = b;
            b = num;
        }
        console.log(num)
    }
    

    주어진 코드에서는 변수 a와 b를 사용하여 피보나치 수열의 여섯 번째 항을 계산하고 다섯 번째 항의 값과 합하여 출력하는 것입니다. 코드를 단계별로 설명하겠습니다:

  2. ab를 각각 1로 초기화합니다. 이 값들은 피보나치 수열의 첫 번째와 두 번째 항을 나타냅니다.
  3. 반복문을 통해 피보나치 수열의 여섯 번째 항까지 계산합니다. i가 0부터 시작하여 6보다 작을 때까지 반복됩니다.
  4. 각 반복에서는 새로운 항을 계산하고 num에 할당합니다. 새로운 항은 이전 두 항의 합으로 계산됩니다.
  5. 이전의 b 값을 a에 할당하고, 새로 계산된 num 값을 b에 할당하여 다음 항을 준비합니다.
  6. 반복문이 종료된 후에는 여섯 번째 항의 값과 다섯 번째 항의 값의 합이 num 변수에 저장되어 있습니다.
  7. 마지막으로 console.log()를 사용하여 여섯 번째 항과 다섯 번째 합의 값을 출력합니다.

따라서 이 코드는 결과값 21을 출력합니다.

이렇게 오늘 알고리즘 10문제를 간단정리 해보았습니다

오늘도 필자의 부족한 글 읽어주셔서 감사합니다.

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