JAVASCRIPT

자바스크립트 오답노트!

Kim do hyun 2023. 4. 28. 22:47
728x90
반응형

자바스크립트 오답노트

 

 

 

 

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

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

    console.log(sum) 
}

문제 풀이

위의 코드는 반복문을 사용하여 i가 1부터 10까지 증가하는 동안, i의 값이 4로 나누어떨어지면 sum에서 i를 뺀 결과를, i를 4로 나눈 나머지가 1이면 sum에 i를 더한 결과를, i를 4로 나눈 나머지가 2이면 sum에 i를 곱한 결과를 구하는 코드입니다.

정답

-4


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

문제 풀이

위의 코드는 주어진 배열 num에서 최대값과 최소값을 찾아 출력하는 코드입니다.

우선 배열의 첫 번째 요소인 10을 초기값으로 max와 min에 저장합니다. 그 후, for 루프를 이용하여 배열을 탐색하면서, 현재 요소가 max보다 크면 max를 현재 요소로 업데이트하고, 현재 요소가 min보다 작으면 min을 현재 요소로 업데이트합니다.

정답

50 10


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

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

    console.log(func(1, 3, 4));
}

문제 풀이

func 함수 내에서는 cnt와 ret 변수를 선언하고, while 루프를 사용하여 cnt가 n과 같아질 때까지 반복합니다. 그러나 while 루프의 조건식이 항상 false이므로, while 루프는 실행되지 않습니다. 따라서 func 함수는 항상 ret 변수의 값을 반환하게 됩니다.

func(1, 3, 4)를 호출하면, func 함수는 ret 변수의 값인 1을 반환합니다.

정답

1


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

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

    console.log(sum)
}

문제 풀이

위의 코드는 1부터 10까지의 홀수의 합을 구하는 코드입니다.

i를 1로 초기화하고, while 루프를 사용하여 i가 10보다 작은 동안 반복합니다. 반복문 내부에서 i를 1씩 증가시키면서, i가 짝수이면 continue문을 실행하여 다음 반복으로 넘어갑니다. 반면 i가 홀수이면 sum 변수에 i 값을 더합니다.

따라서 실행 결과는 다음과 같습니다.

정답

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

문제 풀이

위의 코드는 주어진 배열 num을 버블 정렬(bubble sort) 알고리즘을 사용하여 정렬하는 코드입니다.

이중 for 루프를 사용하여 배열을 탐색하며, 바깥쪽 루프는 정렬할 요소들의 개수에 해당하는 num.length-1번만큼 반복합니다. 안쪽 루프는 현재 정렬되지 않은 요소들 중에서 인접한 두 요소를 비교하여 정렬합니다. 이때, 현재 요소가 다음 요소보다 크다면 두 요소의 위치를 바꿉니다.

위의 코드는 정렬할 요소들의 개수가 1개뿐이므로, 바깥쪽 루프는 단 한 번만 실행됩니다. 즉, 안쪽 루프는 배열의 처음부터 끝에서 두 번째 요소까지 탐색하여 인접한 두 요소를 비교하게 됩니다. 이때, 첫 번째 요소인 56과 두 번째 요소인 4를 비교하여 두 요소의 위치를 바꾸게 됩니다. 따라서 num 배열은 [4, 56, 3, 65, 78]이 됩니다.

정답

[4, 56, 3, 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)
}

문제 풀이

 

정답

 


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

문제 풀이

 

정답

 


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

문제 풀이

주어진 코드는 배열 num의 요소들을 더한 값을 반환하되, 해당 요소가 짝수인 경우 더하는 대신 빼는 코드입니다.

따라서 num 배열의 모든 요소를 더한 값을 sum 변수에 할당하고, 이후 num 배열의 각 요소를 순회하면서 해당 요소가 짝수인 경우 sum 변수에서 빼는 작업을 수행합니다.

정답

7


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

문제 풀이

해당 코드에서 num 변수의 초기값으로 문자열 배열 ["0","1","2","3","4","5","6","7","8","9"]이 할당되어 있습니다. 그런데 이후에 for 반복문을 사용하여 배열의 각 요소에 i+1 값을 할당하고 있습니다. 따라서 이 코드를 실행하면 num 배열은 [1,2,3,4,5,6,7,8,9,10]으로 변환됩니다.

그리고 두 번째 for 반복문에서는 i가 3의 배수가 아닌 경우에만 sum 변수에 현재 num[i] 값을 더해주고 있습니다. 따라서 i가 1, 4, 7번째일 때 num[i]의 값인 2, 5, 8이 sum에서 빼지게 됩니다. 따라서 sum의 최종값은 100 + 1 + 3 + 4 + 6 + 7 + 9 + 10 = 140이 됩니다.

정답

140


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

문제 풀이

위 코드에서는 두 개의 배열 arr과 temp가 있습니다. arr의 각 요소들 중에 temp와 동일한 요소가 있는지 확인하고, 만약 temp와 동일하지 않은 요소가 있다면 그 요소를 temp 배열에 넣습니다. 이를 위해 flag 변수를 사용하여 temp와 동일한 요소를 찾았는지 여부를 확인하고, 만약 찾지 못했다면 temp 배열의 현재 인덱스 idx에 arr 배열의 요소를 넣습니다.
따라서 위 코드를 실행하면 temp 배열이 다음과 같이 변할 것입니다.
[1, 2, 3, 6, 8]
코드에서 출력되는 값은 temp 배열에 추가되는 요소입니다.

정답

3, 6, 8


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

문제 풀이

min 변수를 배열의 첫 번째 요소로 초기화한 뒤, for문을 사용하여 배열 num을 순회합니다. if문을 사용하여 현재까지 찾은 최소값보다 작은 요소를 발견하면 해당 요소로 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 변수에는 "Remember november"라는 문자열이 저장되어 있습니다. s1.slice(0, 3)은 s1 문자열에서 0번째부터 3번째까지의 부분 문자열을 반환합니다. 따라서 s1.slice(0, 3)은 "Rem"이 됩니다.

s1.slice(12, 16)은 s1 문자열에서 12번째부터 16번째까지의 부분 문자열을 반환합니다. 따라서 s1.slice(12, 16)은 "ober"가 됩니다.

두 부분 문자열 "Rem"과 "ober"를 합쳐서 s2 변수에 저장합니다. 따라서 s2는 "Remober"가 됩니다.

s3 변수에는 "r AND you"라는 문자열이 저장되어 있습니다.

console.log(s2 + s3)은 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 );
}

문제 풀이

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

문제 풀이

 

정답

 


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

{
    let result = 0;
    for(let i=1; i<999; i++){
        if(i%3==0 && i%2 !=0){
            result = i;
        }
    }
    console.log(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();
}

문제 풀이

함수 func는 매개변수로 받은 num이 1 이하일 경우 1을 반환하고, 그 외의 경우에는 num에 자기 자신보다 2 작은 수를 대입하여 다시 func를 호출한 결과와 num을 더한 값을 반환합니다.
이렇게 호출된 func 함수는 다시 자신보다 2 작은 수를 대입하여 재귀적으로 호출되며, 이전에 호출한 함수의 결과와 더해지면서 최종적으로 1부터 num까지의 홀수 합을 계산합니다.
메인 함수 main은 num 변수를 5로 초기화하고, func 함수에 num을 전달하여 그 결과를 콘솔에 출력합니다. 따라서 이 코드를 실행하면, 1부터 5까지의 홀수 합인 9가 콘솔에 출력됩니다

정답

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

문제 풀이

변수 a와 b에 각각 1을 할당합니다.
반복문을 사용하여 a와 b의 합인 num을 계산합니다.
이 때, a에는 b의 값을, b에는 num의 값을 할당합니다.
반복문을 총 6번 실행하여, num 변수에는 a와 b의 합이 6번 누적된 값이 저장됩니다.
console.log(num)을 호출하여 num의 값을 출력합니다.
a와 b가 순차적으로 1, 1, 2, 3, 5, 8, ...과 같은 피보나치 수열을 이루기 때문에, 6번 반복한 이후에 num에는 13이 저장됩니다.

정답

13


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제곱을 계산합니다.
이 때, res라는 변수에 결과를 누적하여 저장합니다.
func(2, 10)을 호출하여 반환된 값을 변수 res에 할당합니다.
res는 2의 10제곱인 1024가 됩니다.
console.log(res)를 호출하여 변수 res의 값을 출력합니다.
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;
    }
}

문제 풀이

함수 func는 매개변수 n을 받아서, 0부터 n-1까지의 숫자가 들어있는 배열 num을 생성합니다.
func(4)를 호출하여 반환된 배열을 변수 a에 할당합니다.
a는 [0, 1, 2, 3]과 같은 배열이 됩니다.
반복문을 사용하여 배열 a의 각 요소를 출력합니다.
0, 1, 2, 3이 순서대로 출력됩니다.

정답

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, b, c, d에 각각 3, 4, 3, 5를 할당합니다.
첫 번째 조건문을 평가합니다.
a가 2와 같거나 a와 c가 같은 경우
c가 d보다 크지 않은 경우
1이 b와 c가 같지 않거나 c가 d와 같지 않은 경우와 같은 경우
첫 번째 조건문이 참이면, a에 b와 c의 합을 할당합니다.
두 번째 조건문을 평가합니다.
7이 b와 c가 같지 않거나 a와 같은 경우
두 번째 조건문이 참이면, a를 출력합니다.
두 번째 조건문이 거짓이면, b를 출력합니다.
첫 번째 조건문이 거짓이면, a와 b의 합을 출력합니다.

 

정답

7