WEB/JAVASCRIPT

[javascript] 정보처리기능사 시험 7 오답노트

aimee418 2023. 4. 23. 19:18

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

✈. 01 다음의 결괏값을 작성하시오.

{
    let data = [10, 6, 7, 9, 3];
    let temp;

    for(let i=0; i<4; i++){
        for(let j=i+1; j<5; j++){
            if(data[i] > data[j]){
                temp = data[i];
                data[i] = data[j];
                data[j] = temp;
            }
        }
    }

    console.log(data)     
}

이 코드는 선택 정렬(selection sort) 알고리즘을 사용하여 배열의 원소를 오름차순으로 정렬하는 코드입니다.

선택 정렬은 주어진 배열에서 가장 작은 원소를 선택하여 배열의 맨 앞으로 보내고, 그 다음으로 작은 원소를 선택하여 두 번째 자리로 보내는 과정을 반복하여 정렬을 수행합니다.
위 코드에서는 두 개의 반복문을 사용하여 배열의 모든 원소를 비교하고, 작은 원소를 앞으로 이동시키는 과정을 수행합니다.

첫 번째 반복문은 i 변수를 이용하여 배열의 첫 번째 원소부터 마지막에서 두 번째 원소까지 반복합니다.
두 번째 반복문은 j 변수를 이용하여 i+1 번째 원소부터 마지막 원소까지 반복합니다.
반복문 내에서 if 문을 사용하여 data[i]가 data[j]보다 크면 두 원소의 위치를 바꾸는 작업을 수행합니다.
마지막으로, 정렬된 배열을 출력합니다.

 

따라서, 위 코드의 실행 결과는 '[3, 6, 7, 9, 10]'입니다.

 

 

✈. 02 다음의 결괏값을 작성하시오.

{
    let a = func(4);

    for(let i=0; i<a.length; i++){
        console.log(a[i]);
    }

    function func(n){
        let num = [];
        for(let i=0; i<n; i++){
            num[i] = i;
        }
        return num;
    }
}

위 코드는 함수를 이용하여 0부터 n-1까지의 정수를 요소로 갖는 배열을 생성하고, 생성된 배열의 요소들을 순서대로 출력하는 코드입니다.

 

먼저, 'func' 함수에서는 'num'이라는 빈 배열을 생성하고, 반복문을 사용하여 'num' 배열의 요소에 0부터 n-1까지의 정수를 순서대로 할당합니다. 그리고, 'num' 배열을 반환합니다.

반환된 'num' 배열은 'a' 변수에 저장되며, 'a.length'를 사용하여 배열의 길이를 구합니다. 그리고, 'for'문을 사용하여 'a' 배열의 요소를 하나씩 출력합니다.

위 코드에서는 'func(4)'를 호출하여 배열을 생성하고, 'for'문을 사용하여 배열의 요소를 순서대로 출력합니다. 따라서, 위 코드의 실행 결과는 다음과 같습니다.

0
1
2
3

즉, 'func' 함수에서 생성된 '[0, 1, 2, 3]'이라는 배열이 'a' 변수에 저장되며, 'for'문에서 'a' 배열의 요소들이 순서대로 출력됩니다.

 

✈. 03 다음의 결괏값을 작성하시오.

{
    let i = 3, k = 1;

    switch(i){
        case 1: k++;
        case 2: k += 3;
        case 3: k = 0;
        case 4: k += 3;
        case 5: k -= 10;
        default: k--;
    }
    console.log(k);
}

해당 코드는 switch 문을 이용한 조건 분기 예시입니다.

switch 문은 표현식의 값과 일치하는 case 문으로 분기하여 실행하는 조건문입니다. 해당 코드에서는 변수 i가 3으로 초기화되어 있으므로, case 3: 이 실행됩니다.

 case 3: 이 실행되면 k = 0; 문장이 실행되므로 k 변수의 값이 0이 됩니다.

 그 후, case 4: 문장이 실행되어 k += 3; 이 실행되어 k의 값은 3이 됩니다.
 case 5: 문장이 실행되어 k -= 10; 이 실행되어 k의 값은 -7이 됩니다. 

 마지막으로, default: 문장이 실행되어 k-- 이 실행되어 k의 값은 -8이 됩니다.

따라서, 해당 코드의 결과값은 -8입니다.

 

 

✈. 04 다음의 결괏값을 작성하시오.

{
    let i=0, c=0;

    while(i<10){
        i++;
        c *= i;
    }

    console.log(c);
}

위 코드는 'while'문을 사용하여 변수 'i'의 값이 10보다 작을 동안 반복하여 'c' 값을 계산하고, 마지막으로 'c' 값을 출력하는 코드입니다.

먼저, 'i'와 'c'를 각각 0으로 초기화합니다. 'while'문을 실행하면서, 'i' 값이 10보다 작을 동안 반복합니다. 반복문 안에서, 'i' 값을 1씩 증가시키고, 'c' 값에 'i'를 곱한 값을 할당합니다. 따라서, 'c' 값은 0에서부터 1, 2, 6, 24, 120, 720, 5040 등으로 커집니다. 'i' 값이 10이 되면 'while'문이 종료되고, 'console.log'를 사용하여 'c' 값을 출력합니다.

 

따라서, 위 코드의 실행 결과는 '0'입니다.

이유는 'c' 값을 초기화할 때 0으로 초기화했기 때문에, 반복문 안에서 'c' 값이 변화해도 최종적으로는 0으로 남게 됩니다.

 

 

✈. 05 다음의 결괏값을 작성하시오.

{
    function func1(){
        return 10;
    }
    function func2(){
        return (30 + func1());
    }
    function func3(){
        return (60 + func2());
    }
    function func4(){
        return (80 + func3());
    }
    console.log(func4());
}

이 코드는 4개의 함수를 선언하고, 그 함수들을 서로 호출하여 최종적으로 반환값을 출력하는 코드입니다.

▷ 'func1()'은 10을 반환합니다.
'func2()'는 30에 'func1()'의 반환값을 더한 값을 반환합니다.
'func3()'는 60에 'func2()'의 반환값을 더한 값을 반환합니다.
'func4()'는 80에 'func3()'의 반환값을 더한 값을 반환합니다.

 

그리고 마지막으로 'console.log()' 함수를 이용하여 func4()의 반환값을 출력합니다.

따라서, 이 코드를 실행하면 180이 출력됩니다.

 

 

✈. 06 다음의 결괏값을 작성하시오.

{
    let i = 0;
    let sum = 0;

    while(i < 10){
        i++;
        if(i % 2 == 1){
            continue;
        }
        sum += i;
    }

    console.log(sum)
}

이 코드는 'while문'을 이용하여 1부터 10까지의 숫자 중에서 짝수만 더하는 코드입니다.

▷ 'i' 변수와 'sum' 변수를 각각 0으로 초기화합니다.
▷ 'while문'을 이용하여 'i'가 10보다 작을 때까지 반복합니다.
▷ 반복문이 실행될 때마다 'i'를 1씩 증가시킵니다.
▷ 'i'가 홀수인 경우에는 'continue 문'을 이용하여 반복문의 처음으로 돌아갑니다.
▷ 'i'가 짝수인 경우에는 'sum' 변수에 'i'를 더합니다.
▷ 반복문이 종료되면, 'sum' 변수의 값을 출력합니다.

 

따라서, 이 코드를 실행하면 2 + 4 + 6 + 8 + 10 = 30이 출력됩니다.

 

 

✈. 07 다음의 결괏값을 작성하시오.

{
    function func(num1, num2){
        let res = 1;
        for(let i=0; i<num2; i++){
            res *= num1;
        }
        return res;
    }
    let res = func(2, 10);

    console.log(res)
}

이 코드는 먼저 'func'라는 함수를 선언합니다. 이 함수는 'num1'과 'num2'라는 두 개의 매개변수를 받아들입니다. 그리고 'res'라는 변수를 1로 초기화하고, 'num1'을 'num2'번 곱하여 'res'에 저장합니다. 그리고 나서 'res'를 반환합니다.

그 다음 코드에서는, 'func' 함수를 호출하면서 인수로 '2'와 '10'을 전달합니다. 그리고 'res' 변수에 'func' 함수의 반환값을 저장합니다. 마지막으로 'res'를 출력합니다.

따라서 이 코드는 2를 10번 곱한 결과인 '1024'를 출력합니다.

 

 

✈. 08 다음의 결괏값을 작성하시오.

{
    let a = 3, b = 4, c = 3, d = 5;

    if( (a == 2 | a == c) & !(c > d) & (1 == b ^ c != d) ){
        a = b + c;
        if( 7 == b ^ c != a ){
            console.log(a);
        } else {
            console.log(b);
        }
    }
}

이 코드는 복잡한 논리식을 활용하여 조건문을 수행하는 코드입니다.

▷ a가 2 또는 c와 같고, c가 d보다 크지 않은지 확인합니다. ((a == 2 | a == c) & !(c > d))
▷ 1이 b와 c가 같지 않거나 c와 d가 같은지 확인합니다. (1 == b ^ c != d)
▷ 위의 두 가지 조건문이 모두 true이면 a를 b+c로 할당합니다. 그렇지 않으면 b를 출력합니다.
▷ 따라서 위의 조건문이 참이면 a는 b+c인 7이 됩니다. 

따라서 이 코드의 출력 결과는 7이 됩니다.

 

 

✈. 09 다음의 결괏값을 작성하시오.

{
    function func(a){
        if( a < 1 ) return 1
        return a * func(a - 1);
    }
    
    console.log(func(5))
}

이 코드는 팩토리얼 계산 함수를 구현하는 코드입니다.

함수 'func'는 매개변수 'a'를 받아서, 'a'부터 1까지의 정수를 차례로 곱한 결과인 팩토리얼을 계산하여 반환합니다.

팩토리얼 계산은 재귀적으로 이루어집니다. 'a'가 1보다 작으면 1을 반환하고, 그렇지 않으면 'a'와 'func(a-1)'의 곱을 반환합니다. 이렇게 재귀적으로 호출하여 'a'가 1이 될 때까지 계속해서 곱해나가는 것입니다.

따라서 'func(5)'는 5부터 1까지의 곱을 계산한 결과인 120을 반환하게 됩니다.

따라서 코드의 실행 결과는 120입니다.

 

 

✈. 10 다음의 결괏값을 작성하시오.

{
    function func(){
        let a=2, d=6, total=a, n=2;
        for(let i=0; i<5; i++){
            total += a + (n-1) * d;
            n++;
        }
        console.log(total)
    }
    func();
}

이 코드는 등차수열의 합을 구하는 코드입니다.

 함수 func()를 정의합니다.
 a 변수를 2로, d 변수를 6으로, total 변수를 a로 초기화하고, n 변수를 2로 초기화합니다.
 반복문을 이용해 등차수열의 합을 계산합니다. 반복문은 0부터 4까지 5번 실행됩니다.
 반복문 내부에서는 total 변수에 a + (n-1)*d를 더해줍니다. 그리고 n 변수를 1 증가시킵니다.
 반복문이 종료된 후 total 변수의 값을 출력합니다.

 

따라서 코드를 실행하면 102가 출력됩니다.

 

 

✈. 11 다음의 결괏값을 작성하시오.

{
    let score = 85;
        
    score = parseInt(______);

    switch (  score  ){
        case 9 :
            console.log("A+");
            break;
        case 8 :
            console.log("B+");
            break;
        case 7 :
            console.log("C+");
            break;
        case 6 :
            console.log("D+");
            break;
        default :
            console.log("F+");
            break;
    }
    //B+
}

이 코드는 주어진 'score' 변수의 값에 따라 'switch 문'으로 분기하고, 각각의 'case'에서 다른 등급을 출력하는 코드입니다. 'score' 변수는 우선 85로 초기화 되어 있습니다.

빈칸 안에 들어갈 코드는 'parseInt() 함수'를 사용해서 문자열 "85"를 숫자 85로 변환하는 코드입니다.

따라서 'parseInt()' 함수의 인자로 "85"를 전달해주어야 합니다. 'parseInt()' 함수는 전달된 문자열을 정수로 변환하여 반환하는 함수입니다.

그리고 주어진 'score' 값인 85은 'switch 문'의 'case 8:' 에 해당되므로, "B+" 가 출력됩니다.

따라서 정답은 "B+" 입니다.

 

 

✈. 12 다음의 결괏값을 작성하시오.

{
    let score = [70, 40, 30, 90, 30]
    let up80 = 0, m = 0;

    for(let i=0; i<5; i++){
        if(score[i] > 80) up80++;
        if(m < score[i]) m = score[i];
    }

    console.log(up80, m);
}

이 코드는 주어진 배열(score)에서 80보다 큰 숫자의 개수와 배열에서 가장 큰 숫자를 찾아 출력하는 코드입니다.

▷ 먼저, 변수 up80와 m을 0으로 초기화합니다.
▷ for 루프를 이용해서 배열의 모든 요소를 순회합니다.
▷ 각 요소를 순회하면서, 만약 현재 요소가 80보다 크다면 up80 변수를 1 증가시킵니다.
▷ m 변수에 현재 요소와 m 변수의 값을 비교하여 더 큰 값을 m 변수에 저장합니다.
▷ 마지막으로, up80와 m 변수를 출력합니다.

따라서, 이 코드의 출력 결과는 '1'과 '90'이 됩니다.

 

✈. 13 다음의 결괏값을 작성하시오.

{
    let score = [17, 15, 24, 18, 27];
    let cnt = 0;

    for(let i=0; i<5; i++){
        if(score[i]%2 + score[i]%3 == 0) cnt++
    }

    console.log(cnt);
}

이 코드는 주어진 배열에서 각 원소를 2로 나눈 나머지와 3으로 나눈 나머지를 더한 결과가 0인 원소의 개수를 구하는 코드입니다.

배열 'score'의 원소를 하나씩 순회하면서, 현재 원소를 2로 나눈 나머지와 3으로 나눈 나머지를 더한 값이 0이면 'cnt' 변수를 1 증가시킵니다. 마지막으로 'cnt' 값을 출력합니다.

따라서, 이 코드는 배열 'score'에서 2로 나눈 나머지와 3으로 나눈 나머지의 합이 0인 원소의 개수를 출력합니다.

따라서, 이 코드의 출력 결과는 2가 됩니다.

 

 

✈. 14 다음의 결괏값을 작성하시오.

{
    let a = 10, b = 15;

    console.log(++a/5 << b/2-1*2);
}

먼저 코드를 살펴보면, 'a' 변수에 10을, 'b' 변수에 15를 할당합니다. 그리고 '++a'는 'a'를 1 증가시킨 후에 결과값으로 사용하므로, 'a'는 이후부터 11이라는 값을 가집니다.

그리고 '<<' 비트 연산자는 좌측 피연산자를 이진수로 변환한 후에 좌측 시프트(shift) 연산을 수행합니다. 이때 우측 피연산자는 시프트할 비트 수를 나타냅니다.

따라서, '++a/5'는 '11/5'가 되며, 이 결과값은 '2.2'가 됩니다. 'b/2-1*2'는 '6.5'가 되며, 이 값은 '6'과 가장 가까운 정수로 반올림되어 '6'이 됩니다.

그리고 '2 << 6'은 2를 이진수로 변환한 후에 좌측으로 6비트 이동한 결과값을 나타냅니다. 2를 이진수로 변환하면 '10'이므로, 이 값을 좌측으로 6비트 이동하면 '1000000'이 됩니다. 이 값은 10진수로 변환하면 '64'가 됩니다.

따라서, 이 코드의 결과값은 64가 됩니다.

 

 

✈. 15 다음의 결괏값을 작성하시오.

{
    let a = Math.ceil((21/4) * 3);
    let b = Math.round((a * a) / a);

    console.log(a + b)
}

이 코드는 다음과 같은 작업을 수행합니다.

▷ 'a'에 21/4 * 3의 올림 값을 할당합니다. '21/4'는 5.25이고, 이를 3으로 곱하면 15.75가 됩니다. 따라서 'Math.ceil(15.75)'는 16이 됩니다.
'b'에 'a'의 제곱을 'a'로 나눈 값의 반올림을 할당합니다. 'a'가 16이므로 'b'는 '(16 * 16) / 16'인 16이 됩니다.
'a'와 'b'를 더한 값을 출력합니다. 'a'와 'b'의 합인 32가 출력됩니다

 

따라서, 이 코드의 출력결과는 32입니다.

 

 

✈. 16 다음의 결괏값을 작성하시오.

{
    let a = 10, b = 5;

    console.log(a / b * 2);
    console.log(++a * 3);
    console.log(a > b && a != 5);
}

이 코드는 세 개의 문장으로 구성되어 있습니다. 각 문장의 동작은 다음과 같습니다.

 

 첫번째 줄에서 'a / b * 2' 는 '10 / 5 * 2' 이므로 4가 출력됩니다.

 두번째 줄에서 '++a * 3' 는 'a'를 먼저 1 증가시키고 '11 * 3'이 되므로 33이 출력됩니다.

 세번째 줄에서 'a > b && a != 5' 는 'true && true' 이므로 true가 출력됩니다.

따라서 전체 출력 결과는 다음과 같습니다.

4
33
true

 

 

 

✈. 17 다음의 결괏값을 작성하시오.

{
    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라는 변수를 초기화하고, for 루프를 통해 num이라는 변수에 a와 b의 합을 저장하고, a에는 이전 b의 값을, b에는 이전 num의 값을 할당합니다.

즉, for 루프를 통해 a와 b는 각각 1과 1로 시작하고, num은 첫 번째 루프에서 2가 되고, 두 번째 루프에서 3이 되며, 세 번째 루프에서 5가 되고, 네 번째 루프에서 8이 되고, 다섯 번째 루프에서 13이 되고, 여섯 번째 루프에서 21이 됩니다. 그리고 마지막으로 console.log(num)을 통해 num의 값을 출력합니다.

따라서, 이 코드의 출력결과는 21입니다.

 

 

✈. 18 다음의 결괏값을 작성하시오.

{
    let a, b, c, sum;
    a = b = 1;
    sum = a + b;

    for(let i=3; i<=5; i++){
        c = a + b;
        sum += c;
        a = b;
        b = c;
    }

    console.log(sum)
}

이 코드는 피보나치 수열의 3번째부터 5번재까지의 항의 합을 구하는 코드입니다.

 

이 코드는 변수 a와 b를 1로 초기화하고, sum에 a와 b를 더한 값을 할당합니다. 그 후, for 루프를 이용해 3부터 5까지의 인덱스를 갖는 i 변수를 만듭니다.
for 루프에서는 a와 b를 더한 값을 c에 할당하고, sum에 c를 더한 뒤, a에 b의 값을 할당하고, b에 c의 값을 할당합니다. 이 과정을 i가 5가 될 때까지 반복합니다.
따라서 sum에는 a와 b를 포함한, 3번째부터 5번째까지의 피보나치 수열의 합이 저장되어 있으며, 이 값은 12입니다.

따라서, 이 코드의 출력결과는 12입니다.

 

 

✈. 19 다음의 결괏값을 작성하시오.

{
    let a = 2, r = 3, total = a;
    for(let i=0; i<3; i++){
        a *= r;
        total += a;
    }
    console.log(total)
}

이 코드는 등비수열의 합을 계산하는 코드입니다. 등비수열은 연속하는 두 항의 비율이 일정한 수인 수열을 말합니다.

변수 a는 등비수열의 첫째 항으로 2로 초기화되고, 변수 r은 등비비율로 3으로 초기화됩니다. 변수 total은 초기값으로 a와 동일한 2로 설정됩니다.
그 후, for 반복문을 사용하여 0부터 2까지 i 값을 변화시키면서 반복됩니다. 반복문 안에서, a 변수는 r 비율에 따라 곱해집니다. 그리고 total 변수는 새로운 a 값을 더해져 업데이트됩니다.

반복문이 종료되면, total 값이 출력됩니다.

따라서, 코드를 실행하면 total 값이 출력되며 이 값은 2 + 6 + 18 + 54 = 80 입니다.

 

 

✈. 20 다음의 결괏값을 작성하시오.

{
    let num, i;
    for(num=2; num<=10; num++){
        for(i=2; i<num; i++){
            if(num % i == 0) break;
        }
        if(i==num){
            console.log(num)
        }
    }
}

이 코드는 2부터 10까지의 모든 소수를 출력하는 코드입니다.

첫째 줄에서 변수 num과 i를 선언하고, num을 2로 초기화합니다.
그리고 num이 2부터 10까지 반복문을 돕니다. 내부 반복문에서는 i를 2부터 num - 1까지 반복하며, num이 i로 나누어떨어지는지 확인합니다. 만약 나누어떨어지면, 내부 반복문을 빠져나오고, 나누어 떨어지지 않으면 i를 1 증가시키며 반복문을 진행합니다. 내부 반복문이 끝나면 i와 num이 같은지 비교합니다. 같다면 num은 소수이므로 num을 출력합니다.

따라서 위 코드는 2, 3, 5, 7을 출력합니다.