코딩 공부/오답노트

자바스크립트 테스트08 정보처리 대비 오답노트

천서리 2023. 4. 21. 12:10
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

자바스크립트 테스트

정보처리기능사 기출문제를 자바스크립트로 변환한 문제입니다.

 


 

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

{
    let i = 0;
    let sum = 0;
    
    while(i < 10){
        i = i+1;
        if( i % 3 == 0) sum -= i;
        if( i % 3 == 1) sum += i;
        if( i % 3 == 2) sum *= i 
    }

    console.log(sum) 
}
😎결과 확인하기
129

 

 

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

{
    let num = [10, 20, 30, 40, 50];
    let i, max, min;
    max = min = num[0];

    for(i=0; i<5; i++){
        if(num[i] > max) max = num[i];
        if(num[i] < min) min = num[i];
    }

    console.log(max, min);
}
😎결과 확인하기
50, 10

 

 

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

{
    function func(begin, diff, n){
        cnt = 1;
        ret = begin;
        while(true){
            cnt += 1;
            ret *= diff;
            if(cnt == n) return ret;
        }
    }

    console.log(func(1, 3, 4));
}
😎결과 확인하기
27

 

오답

cnt 변수를 1로 초기화하고, ret 변수를 begin으로 초기화합니다. 그리고 while문을 돌면서, cnt 변수를 1씩 증가시키고, ret 변수에 diff를 곱한 값을 저장합니다. 그리고 cnt가 n과 같아지면, 현재 ret의 값을 반환합니다.

 

예를 들어, func(1, 3, 4)를 호출하면, ret 변수는 1에서 시작해서 3을 곱한 값, 9를 저장하고, 그 다음에는 3을 곱한 값, 27을 저장하고, cnt가 4가 되면 27을 반환합니다. 따라서 출력 결과는 27이 됩니다.

 

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

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

    console.log(sum)
}
😎결과 확인하기
25

 

 

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

{
    let num = [56, 4, 3, 65, 78];
    let temp;

    for(let i=0; i<1; i++){
        for(let j=0; j<num.length-i-1; j++){
            if(num[j]>num[j+1]){
                temp = num[j];
                num[j] = num[j+1];
                num[j+1] = temp;
            }
        }
    }

    console.log(num)
}
😎결과 확인하기
[4, 3, 56, 65, 78]

 

오답

변수 num에 정렬할 숫자 배열이 할당되어 있습니다. let temp;는 나중에 두 요소를 교환할 때 사용할 임시 변수를 선언하는 코드입니다.

이중 for문을 사용하여 배열의 요소를 반복하며, num[j]num[j+1]보다 크면, 두 요소의 위치를 바꾸는 코드를 작성하고 있습니다. 이때, temp를 사용하여 두 요소의 값을 교환합니다.

바깥쪽 for문의 조건 i<1은 정렬 알고리즘을 한 번만 수행하도록 설정하고 있습니다. 이는 배열의 크기가 작아서 정렬이 빨리 완료될 것이라고 가정한 것입니다.

최종적으로, 정렬된 배열을 출력하고 있습니다. console.log(num)에서 num은 정렬된 배열을 나타냅니다.

 

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

{
    let num = [56, 4, 3, 65, 78];
    let min = 9999;

    for(let i=0; i<10; i++){
        if(min > num[i]){
            min = num[i];
        }
    }

    console.log(min)
}
😎결과 확인하기
3

 

 

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

{
    let num = [3, 4, 5, 7, 8];
    let temp;

    for(let i=0; i<=3; i++){
        for(let j=i+1; j<=4; j++){
            if(num[i] < num[j]){
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }

    console.log(num);
}
😎결과 확인하기
[8, 7, 5, 4, 3]

 

오답

변수 num에 정렬할 숫자 배열이 할당되어 있습니다. let temp;는 나중에 두 요소를 교환할 때 사용할 임시 변수를 선언하는 코드입니다.

내부의 이중 for문을 사용하여 배열의 요소를 반복하며, 현재 요소(num[i])보다 뒤에 있는 요소(num[j]) 중에서 더 큰 값을 찾아서 위치를 바꾸는 코드를 작성하고 있습니다. 이때, temp를 사용하여 두 요소의 값을 교환합니다.

바깥쪽 for문은 i 변수를 0부터 3까지 1씩 증가시키면서 배열의 요소를 반복하며, 내부의 for문은 j 변수를 i+1부터 4까지 1씩 증가시키면서 배열의 나머지 요소를 반복합니다. 이는 이미 선택한 요소는 제외하고 다음 요소부터 비교하기 위함입니다.

최종적으로, 정렬된 배열을 출력하고 있습니다. console.log(num)에서 num은 정렬된 배열을 나타냅니다.

 

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

{
    let num = [1,2,3,4,5];
    let sum = 1;
    
    function func(arr){
        for(let i=0; i<arr.length; i++) {
            sum += arr[i];
        }

        for(let i=0; i<arr.length; i++){
            if(arr[i] % 2 == 0) sum -= arr[i];
        }
        return sum;            
    }

    console.log(func(num));
}
😎결과 확인하기
10

 

오답

변수 num에 주어진 숫자 배열이 할당되어 있습니다. let sum = 1;은 나중에 배열의 요소들의 합을 저장할 변수 sum을 초기화하는 코드입니다. 초기값이 1로 설정되어 있는 것은 이 변수가 배열의 곱셈 결과와 함께 사용될 예정이기 때문입니다.

func 함수는 매개변수로 배열 arr을 받아들입니다. 이 함수는 첫 번째 for문에서 arr 배열의 모든 요소를 반복하여 sum 변수에 더하는 코드를 작성합니다.

두 번째 for문에서는 arr 배열의 요소 중에서 짝수에 해당하는 값에 대해 sum 변수에서 빼는 작업을 수행합니다. if(arr[i] % 2 == 0)는 현재 인덱스 i가 짝수인지 확인하는 코드이며, 짝수인 경우 sum 변수에서 해당 요소의 값을 뺍니다.

마지막으로, func 함수는 합산된 결과를 반환합니다. console.log(func(num));에서 num은 정의된 배열을 의미하며, func(num)은 해당 배열에서 홀수에 해당하는 값들의 합을 계산하고 반환하는 함수입니다.

 

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

{
    let num = ["0","1","2","3","4","5","6","7","8","9"];
    let sum = 100;

    for(let i=0; i<num.length; i++){
        num[i] = i+1;
    }
    for(let i=0; i<num.length; i++){
        if(i % 3 == 1){
            sum -= num[i];
        }
    }
    console.log(sum)
}
😎결과 확인하기
85

 

오답

num 배열에는 "0"부터 "9"까지의 문자열이 할당되어 있습니다. 이후 첫 번째 for문에서 num 배열의 모든 요소를 반복하여 각 요소에 해당하는 인덱스 i에 1을 더한 값을 할당합니다. 따라서 num 배열은 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]으로 변경됩니다.

두 번째 for문에서는 num 배열의 각 요소의 인덱스를 확인하여, 해당 인덱스가 3의 배수가 아닌 경우 sum 변수에서 해당 요소의 값을 뺍니다. if(i % 3 == 1) 조건문은 현재 인덱스 i가 3으로 나누었을 때 나머지가 1인지 확인하는 코드입니다. 3으로 나눈 나머지가 1이 아닌 인덱스의 값은 sum 변수에서 빼게 됩니다.

마지막으로, console.log(sum)에서 sum 변수의 최종 값인 85가 출력됩니다. 이는 1부터 10까지의 숫자 중 3으로 나눈 나머지가 1인 숫자(2, 5, 8)의 합을 55에서 빼서 구한 값입니다. 따라서 1+3+4+6+7+9+10 = 40을 55에서 빼면 15이고, 이어서 2+5+8 = 15을 빼면 최종 값인 85가 나오게 됩니다.

 

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

{
    let arr = [1,2,3,4,5];
    let temp = [1,2,4,6,8];
    let idx = 0;
    let flag = true;

    for(let i=0; i<arr.length; i++){
        flag = false;
        if(arr[i] == temp[i]){
            flag = true;
        }
        if(!flag){
            temp[idx++] = arr[i];
            console.log(temp[idx]);
        }
    }
}
😎결과 확인하기
2 4 6

 

오답

  1. 변수 idx를 0으로 초기화하고, flag를 true로 초기화합니다.
  2. for 루프를 사용하여 arr 배열의 모든 요소를 반복합니다.
  3. flag를 false로 설정합니다.
  4. if 문을 사용하여 arr 배열의 i번째 요소와 temp 배열의 i번째 요소를 비교합니다.
  5. 만약 arr 배열의 i번째 요소와 temp 배열의 i번째 요소가 같으면 flag를 true로 설정합니다.
  6. 만약 flag가 false이면, temp 배열에서 해당 인덱스의 값을 arr 배열의 값으로 대체합니다. 이때 idx를 사용하여 temp 배열의 대체할 인덱스를 결정합니다.
  7. temp[idx]를 console.log()를 사용하여 출력합니다.

 

11. 다음은 최솟값을 출력하는 예제이다. 밑줄에 적합한 표현을 작성하시오.

{
    let num = [30,40,24,80,99];
    let min = 9999;

    for(let i=0; i<5; i++){
        if(min > num[i]){
            min = ________;
        }
    }

    console.log("최소값 : ", min);
}
😎결과 확인하기
num[i]

 

오답

num 배열에서 가장 작은 값을 찾아서 min 변수에 할당하고, 마지막으로 console.log를 이용하여 최소값을 출력합니다.

 

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

{
    let s1 = "Remember november";
    let s2 = s1.slice(0, 3) + s1.slice(12, 16);
    let s3 = "r AND you";

    console.log(s2 + s3)
}
😎결과 확인하기
Remember AND you

 

 

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

{
    let x = 1;

    console.log( !(x>0) );
    console.log( x>0 || x<4 );
    console.log( x<<2 );
    console.log( x&2 );
    console.log( x&3 );
}
😎결과 확인하기
false true 4 0 1

 

오답

  1. console.log( !(x>0) );: x > 0은 true를 반환하지만, ! 연산자로 인해 결과값은 false가 됩니다. 따라서 첫 번째 console.log에서는 false가 출력됩니다.
  2. console.log( x>0 || x<4 );: || 연산자는 두 개의 피연산자 중 하나라도 true이면 true를 반환합니다. x > 0은 true이므로 전체 표현식의 결과는 true가 됩니다. 따라서 두 번째 console.log에서는 true가 출력됩니다.
  3. console.log( x<<2 );: << 연산자는 왼쪽 피연산자를 2진수로 변환하여 왼쪽으로 비트를 이동시키고, 오른쪽에 0을 채웁니다. 따라서 x << 2는 1을 2비트만큼 왼쪽으로 이동시켜서 4를 반환합니다. 따라서 세 번째 console.log에서는 4가 출력됩니다.
  4. console.log( x&2 );: & 연산자는 각 비트를 AND 연산하여 두 비트가 모두 1이면 1을 반환합니다. x는 1이므로 이를 2진수로 변환하면 0001이 됩니다. 2도 2진수로 변환하면 0010이 됩니다. 따라서 x & 2는 0001 & 0010으로 계산되어 0이 출력됩니다.
  5. console.log( x&3 );: x는 1이므로 3과 AND 연산을 수행하면 0001 & 0011으로 계산되어 결과값은 1입니다. 따라서 다섯 번째 console.log에서는 1이 출력됩니다.

 

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

{
    let num = 0;
    let i = 1;

    while(i<=50){
        if(i%7 == 0){
            num += i;
        }
        i++;
    }
    console.log(num)
}
😎결과 확인하기
196

 

 

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

{
    let result = 0;
    for(let i=1; i<999; i++){
        if(i%3==0 && i%2 !=0){
            result = i;
        }
    }
    console.log(result);
}
😎결과 확인하기
993

 

오답

1부터 999까지의 수 중 3의 배수이면서 짝수가 아닌 수는 3, 9, 15, ..., 993 이렇게 나열됩니다. 따라서 for문을 돌며 3의 배수이면서 짝수가 아닌 수 중 가장 큰 값을 찾으면 됩니다. 이 코드에서는 result 변수를 이용해 찾고 있습니다. for문에서 i가 3의 배수이면서 짝수가 아닌 경우에만 result에 i값을 할당하고, for문이 끝나면 result 값을 출력하도록 구현되어 있습니다.

 

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

{
    function func(num){
        if(num <= 1){
            return 1;
        } else {
            return num + func(num - 2);
        }
    }
    function main(){
        let num = 5;
        console.log(func(num))
    }
    main();
}
😎결과 확인하기
9

 

오답

함수 func()는 매개변수 num이 1보다 작거나 같으면 1을 반환하고, 그렇지 않으면 num과 (num-2)를 더한 값을 반환합니다. 이렇게 구한 값은 주어진 숫자까지의 홀수들의 합이 됩니다.

함수 main()에서는 num 변수를 5로 초기화하고, func(num)을 호출하여 반환된 값을 출력합니다. 따라서 출력 결과는 1 + 3 + 5 = 9가 됩니다.

 

 

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

{
    let a=1, b=1, num;

    for(let i=0; i<6; i++){
        num = a + b;
        a = b;
        b = num;
    }
    console.log(num)
}
😎결과 확인하기
21

 

 

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

{
    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)
}
😎결과 확인하기
1024

 

 

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

{
    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;
    }
}
😎결과 확인하기
0123

 

 

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

{
    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);
        }
    } else {
        console.log(a + b)
    }
}
😎결과 확인하기
7

 

 

반응형
Adventure Time - BMO