Javascript/시험 오답

정보처리기사 오답노트

아라라_ 2023. 4. 21. 23:22

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

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

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) 
    }
i i % 3 == 0(-) i % 3 == 1(+) i % 3 == 2(*) sum
1   +1   1
2     *2 2
3 -3     -1
4   +4   3
5     *5 15
6 -6     9
7   +7   16
8     *8 128
9 -9     119
10   +10   129

답 : 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));
    }
  cnt ret 조건식 설명
1 1 1   초기화
2 2 3 cnt == 4 3 = 1 x 3
3 3 9 cnt == 4 9 = 3 x 3
4 4 27 cnt == 4 27 = 9 x 3 (반환값)

답 : 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)
    }
반복문 i j num[i] num[j+1] 비교여부 결과
1 0 0 56 4 O [4, 56, 3, 65, 78]
1 0 1 56 3 O [4, 3, 56, 65, 78]
1 0 2 56 65 X [4, 3, 56, 65, 78]
1 0 3 65 78 X [4, 3, 56, 65, 78]
2 0 0 4 3 O [3, 4, 56, 65, 78]
2 0 1 4 56 X [3, 4, 56, 65, 78]
2 0 2 56 65 X [3, 4, 56, 65, 78]
2 0 3 65 78 X [3, 4, 56, 65, 78]

답 : [3,4,56,65,78]


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);
    }
    
i j num[i] num[j] 자리 변경 결과
0 1 3 4 O [4,3,5,7,8]
0 2 4 5 O [5,3,4,7,8]
0 3 5 7 O [7,3,4,5,8]
0 4 7 8 O [8,3,4,5,7]
1 2 3 4 O [8,4,3,5,7]
1 3 4 5 O [8,5,3,4,7]
1 4 5 7 O [8,7,3,4,5]
2 3 3 4 O [8,7,4,3,5]
2 4 4 5 O [8,7,5,3,4]
3 4 3 4 O [8,7,5,4,3]
4 X X X X [8,7,5,4,3]
답 : [8, 7, 5, 4, 3]

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));
    }

첫번째 for문

i 추가된값(기본값 : 1) 결과
0 +1 2
1 +2 4
2 +3 7
3 +4 11
4 +5 16

두번째 for문(sum : 16)

i num[i] 조건충족여부 적용되는값 결과
0 1 X    
1 2 O -2 14
2 3 X    
3 4 O -4 10
4 5 X    

답 : 10


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


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]);
            }
        }
    }
i arr[i] temp[i] flag arr[i] ==temp[i] flag2 temp idx  
0 1 1 true true true 1 0  
1 2 2 true true true 2 0  
2 3 4 false false false 3 1 2
3 4 6 false false false 4 2 4
4 5 8 false false false 5 3 6

답 : 2 4 6


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]


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

{
        let s1 = "Remember november";
        let s2 = s1.slice(0, 3) + s1.slice(12, 16);
        let s3 = "r AND you";
    
        console.log(s2 + s3)
    }
  • 코드에서는 먼저 s1 이라는 문자열을 정의하고, slice() 함수를 사용하여 문자열의 일부분을 추출한 후 변수 s2에 저장합니다.
  • s1.slice(0, 3)은 첫 번째 문자부터 세 번째 문자 앞까지(0, 1, 2)의 부분 문자열 "Rem"을 추출합니다.
  • s1.slice(12, 16)은 13번째 문자부터 16번째 문자 앞까지(12, 13, 14, 15)의 부분 문자열 "embe"를 추출합니다.
    따라서 s2의 값은 "Rem" + "embe" = "Remembe"가 됩니다.
  • 그리고 다음으로 변수 s3에 "r AND you" 문자열을 할당합니다.
  • 마지막으로 console.log(s2 + s3)를 호출하여 문자열 연결을 통해 s2와 s3의 값을 이어 붙인 결과 "Remember and you"가 출력됩니다.

답 : 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 );
    }
  • !(x > 0)
    x > 0 은 참이므로, ! (not) 연산자를 적용하면 거짓이 됩니다.
    결과적으로 false가 출력됩니다.
  • x > 0 || x < 4
    x > 0 이 참이므로, || (or) 연산자를 통해 전체 조건식이 참이 됩니다.
    결과적으로 true가 출력됩니다.
  • x << 2
    << (left shift) 연산자는 비트를 왼쪽으로 지정된 수만큼 이동시키는 연산입니다.
    1 의 이진수 표현인 0001 에 대해 2 비트 왼쪽으로 이동하면 0100 즉, 4 가 됩니다.
    결과적으로 4 가 출력됩니다.
  • x & 2
    & (bitwise and) 연산자는 비트 단위로 and 연산을 수행합니다.
    1 의 이진수 표현인 0001 과 2 의 이진수 표현인 0010 을 and 연산하면 0000 이 됩니다.
    결과적으로 0 이 출력됩니다.
  • x & 3
    1 의 이진수 표현인 0001 과 3 의 이진수 표현인 0011 을 and 연산하면 0001 이 됩니다.
    결과적으로 1 이 출력됩니다.

답 : false  true  4  0  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);
    }

주어진 코드는 1부터 998까지의 숫자 중 3의 배수이면서 짝수는 아닌 숫자를 찾아 그 중 가장 큰 값을 result 변수에 저장하고, result를 출력하는 코드입니다. 따라서, 1부터 998까지의 숫자를 검사하면서 해당 조건을 만족하는 숫자를 찾고, 찾은 숫자 중 가장 큰 값을 출력하게 됩니다. 이 코드에서는 993이 해당 조건을 만족하는 가장 큰 값이므로 993이 출력됩니다.
답 : 993


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


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)
    }

func라는 이름의 함수를 정의하고, num1과 num2 두 개의 매개변수를 받아서 num1을 num2번 곱한 값을 반환하는 함수입니다. 이 함수는 for문를 사용하여 num1을 num2번 반복해서 곱하고, 최종 곱셈 결과값인 res를 반환합니다.
그 다음, let res = func(2, 10);라는 코드를 통해 func 함수를 호출하여, num1에 2를, num2에 10을 전달한 후, 반환된 결과값을 res 변수에 할당합니다.
마지막으로, console.log(res) 코드를 통해 res의 값을 출력합니다. res 변수는 2의 10제곱인 1024가 됩니다. 따라서 이 코드는 1024를 출력합니다.

답 : 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;
        }
    }
    

답 : 0,1,2,3


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)
        }
    }
    
  • (a == 2 | a == c) : a가 2이거나 c와 같으면 true, 그렇지 않으면 false
  • !(c > d) : c가 d보다 크지 않으면 true, 그렇지 않으면 false
  • (1 == b ^ c != d) : 다음 중 하나를 만족하면 true, 그렇지 않으면 false
  • 1 == b : b가 1과 같으면 true
  • c != d : c가 d와 다르면 true
  • 따라서, 첫 번째 if문의 조건식은 false & true & true 이므로 false입니다.
  • 따라서, else 블록이 실행됩니다. a + b를 계산하면 7이 나오므로, 마지막으로 출력되는 값은 7입니다.

답 : 7