Lumpy Space Princess - Adventure Time

JAVASCRIPT

3월 24일 자바스크립트 테스트 오답

jongyung 2023. 3. 24. 10:40

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

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90

모든 문제를 적고 틀린 문제만 오답 정리를 했습니다.

01. 결괏값을 작성하시오.

{
    const str = "javascript";

    const text = str.indexOf("a");
    const text2 = str.lastIndexOf("a");
    const text3 = str.includes("a");

    console.log(text);
    console.log(text2);
    console.log(text3);
}

답: 1 3 true

indexOf() 는 자릿수를 반환하고, 왼쪽에서 가장 첫 번 째부터 0번 째로 순서를 셉니다.

그러므로 javascript 의 알파벳의 왼쪽에서부터 세면, a 는 두 번 째 즉, 1 이 반환됩니다.

 

lastIndexOf() 는 자릿수를 반환하고, 오른쪽에서 순서를 세지만, 자릿수는 왼쪽에서부터 순서를 셉니다.

그러므로  javascript 의 알파벳의 오른쪽에서부터 세면, a 는 네 번 째 즉, 3 이 반환됩니다.

 

includes() 는 불린을 반환합니다.

그러므로 true 가 반환됩니다.

02. 다음의 결괏값을 보고 빈칸을 채우시오.

{
    function func(){
        document.write("함수2가 실행되었습니다.");
    }
    function callback(str){
        document.write("함수1가 실행되었습니다.");
        _______();
    }
    callback(func);

    //함수1가 실행되었습니다.
    //함수2가 실행되었습니다.
}

답: str

03. 결괏값을 작성하시오.

{
    function func(a, b){
        console.log(arguments[0]);
        console.log(arguments[1]);
    }
    func("1", "2");
}

답: 1 2

04. 결괏값을 작성하시오.

{
    function func(num, name, word){
        this.num = num;
        this.name = name;
        this.word = word;
    }
    
    func.prototype = {
        result1 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        },
        result2 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        },
        result3 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        }
    }
    
    const info1 = new func("1", "함수", "실행");
    const info2 = new func("2", "자바스크립트", "실행");
    const info3 = new func("3", "제이쿼리", "실행");
    
    info1.result1();
    info2.result2();
}

답: 1. 함수가 실행되었습니다.
       2. 자바스크립트가 실행되었습니다.

05. 결괏값을 작성하시오.

{
    function func(num, name, word){
        this.num = num;
        this.name = name;
        this.word = word;
    }

    func.prototype.result = function(){
        console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
    }

    const info1 = new func("1", "함수", "실행");
    const info2 = new func("2", "자바스크립트", "실행");
    const info3 = new func("3", "제이쿼리", "실행");

    info1.result();
}

답: 1. 함수가 실행되었습니다.

06. 결괏값을 작성하시오.

{
    function func(index){
        console.log("함수가 실행되었습니다." + index);
    }
    function callback(num){
        for( let i=1; i<=1; i++){
            num(i);
        }
    }
    callback(func);
}

답: 함수가 실행되었습니다. 1

callback 함수는 함수를 두 번 실행(다른 함수에 인수로 넘겨지는 함수)하는 함수입니다.

callback 함수의 초기값과 조건식 그리고 증감식이 1로 정해져 있습니다. 

 

실행문이 적혀있는 함수식이 실행되면서 + index 도 함께 써주어야 합니다.

07. 결괏값을 작성하시오.

{
    let num = 1;

    do {
        num++;
        console.log("실행되었습니다.");
    } while (num <= 5);

}

답: 실행되었습니다. 실행되었습니다. 실행되었습니다. 실행되었습니다. 실행되었습니다.

do...while 문은 테스트 조건이 거짓으로 평가될 때까지 지정된 구문을 실행하는 루프를 만듭니다.
단, 구문이 실행된 뒤에 테스트 조건이 평가됨으로 구문은 무조건 한 번은 실행됩니다.

 

초기값이 1이고, 증감식은 1씩 더해지며 5보다 작거나 같은 정수라는 범위가 정해져 있습니다.

그렇기 때문에 "실행되었습니다." 라는 실행문이 1부터 5까지의 정수의 갯수만큼 반복됩니다.

08. 결괏값을 작성하시오.

{
    const arr = [100, 200, 300, 400, 500];

    const text1 = arr.join("*");
    const text2 = arr.join("-");
    const text3 = arr.join("");
    const text4 = arr.join(" ");

    console.log(text1);
    console.log(text2);
    console.log(text3);
    console.log(text4);

}

답: 100*200*300*400*500
       100-200-300-400-500
       100200300400500
       100 200 300 400 500

09. 다음을 최대한 짧게 약식으로 표현하시오.

{
    function func(str){
        return str;
    }
    func("함수가 실행되었습니다.")
}

답: func = str => str;

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

{
    function func(){
        let i = 10, j = 10, k = 30;
        i /= j;
        j -= i;
        k %= j;

        console.log(i);
        console.log(j);
        console.log(k);
    }
    func();
}

답: 1 9 3

식을 풀어서 쓰면,

10 / 10 = 1

10 - 1(위의 식에서 i의 값이 1로 변환된 상태) = 9

30 % 9(위의 식에서 j의 값이 9로 변환된 상태) = 3

11. 다음을 결과값을 작성하시오.

{
    let k = 0;
    let temp;
    for(let i=0; i<=3; i++){
        temp = k;
        k++;
        console.log(temp + "번");
    }
}

답: 0번 1번 2번 3번

temp 의 값이 0부터 3인 정수이고, 실행문이 temp 를 적도록 쓰였기 때문에

0번부터 4번(0, 1, 2, 3의 갯수) 입력됩니다.

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

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

답: 4 7

풀어서 쓰면, 

3<5 OR 7>8 이고, true OR false 이기 때문에 OR 식은 true 입니다.

true 이면 num1 의 값을 반환하는데, 이 때 식이 실행되면서 num1 앞에 쓴 ++가 동시에 실행됩니다.

num2 는 if문의 밖에 쓴 실행문이기 때문에 단순히 num2의 값을 반환합니다.

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

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

답: 5 2 5

i 는 배열 num 의 자릿수를 뜻합니다. 

그렇기 때문에 if 문을 실행하면 그 값이 해당하는 배열 num 의 자릿수에 해당하는 값을 반환합니다.

 

풀어서 쓰면, 

(0 + 1) % 2 == 0

(1 + 1) % 2 == 0

(2 + 1) % 2 == 0

~

(5 + 1) % 2 == 0 입니다.

 

나누었을 때 나머지 값이 0인 정수는 짝수를 뜻하므로, 1을 더했을 때 짝수를 자릿수로 가지는 값을 찾으면 됩니다.

그렇다면 i 는 1 3 5 가 되고, 답은 배열 num 의 [1] [3] [5] 의 값이 반환됩니다.

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

{
    let num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for(let i=9; i>=0; i--){
        switch(num[i] % 2){
            case 1:
                console.log(num[i]);
                break;
            default:
                console.log("*");
        }
    }
}

답: 9*7*5*3*1*

case 1 에서 숫자 1은 switch(num[i] % 2) 의 값이 1인 경우를 뜻합니다.

i 는 9부터 0까지의 정수입니다.

 

풀어서 쓰면,

num[9]~[0] % 2 의 값이 1일 경우에 배열 num 의 i 값이 해당하는 자릿수의 값을 반환합니다. 

1 이 아닐 경우에는 default 의 값인 * 을 반환합니다.

 

2로 나누었을 때 나머지 값이 1인 정수는 홀수를 뜻합니다.

홀수가 아닌 짝수와 0은 *로 반환합니다.

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

{
    let cnt = 0;
    let sum = 0;
    for(let i=0; i<=7; i++){
        if(i%2 == 1){
            cnt++;
            sum = sum + i;
        }
    }
    console.log(cnt + ", "+sum);
}

답: 4 16

i 의 값은 0부터 7의 정수입니다.

그 값을 2로 나누었을 때 나머지 값이 1인 값을 if 문이 실행시킵니다.

cnt 는 0의 초기값이 주어졌고, sum 은 i 의 값들을 모두 더한 값으로 반환됩니다.

 

2로 나누었을 때 나머지 값이 1인 수는 홀수이므로, i 의 값은 1, 3, 5, 7 입니다.

실행문은 cnt + ", " + sum 이므로, 

it 문을 한 번 실행할 때마다 값이 1씩 증가하는 cnt는 4이고, i 의 값을 모두 더한 값은 16입니다. 

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

{
    let data = [70, 80, 75, 60, 90];
    let best = 1;
    let score = 0;

    for(let i=0; i<data.length; i++){
        if(data[i]>80) {
            best++;
        }
        if(score < data[i]) {
            score = data[i];
        }
    }

    console.log(best, score)
}

답: 2 90

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

{
    let a, b, result;
    a = 7, b = 4
    result = a & b;

    console.log(result)
}

답: 4

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

{
    function solution(a, b, c){
        let answer="YES", max;
        let tot = a + b + c;

        if(a > b) max = a;
        else max = b;
        if(c > max) max = c;
        if(tot-max <= max) answer = "NO"; 
        
        return answer;
    }

    console.log(solution(13, 33, 17));
}

답: NO

a 에는 13, b 에는 33, c 에는 17 의 값을 입력합니다.

if 문들을 풀어서 쓰면,

(13 > 33) max = a; 

else max = b; 인데,

13은 33보다 작으므로, b가 반환되므로 현재까지의 값은 33입니다.

 

(17> max) max = c; 에서 위의 값이 적용되어 max에 33을 대입합니다.

따라서 c는 반환되지 않습니다.

 

((13 + 33 + 17) - max <= max) answer = NO 입니다.

63 - 33 <= 33 이므로 if 문이 실행되어서 NO 가 최종적으로 반환되는 결과값입니다.

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

{
    function solution(a, b, c){
        let answer;
        if(a < b) answer = a;
        else answer = b;
        if(c < answer) answer = c; 
        return answer;
    }
    console.log(solution(2, 5, 1));
}

답: 1

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

{
    function solution(day, arr){
        let answer = 0;
        for(let x of arr){
            if(x % 10 == day) answer++;
        }
        return answer;
    }
    
    arr = [25, 23, 11, 47, 53, 17, 33];
    console.log(solution(3, arr));
}

답: 3

solution 에 3과 배열 arr 을 대입합니다.

for of 문에 if 문이 중첩되어 있습니다.

 

조건은 배열 arr 의 값을 10으로 나눈 나머지 값이 3이면 if문을 실행하여 answer에 1씩 증가하는 것입니다.

 

10으로 나누어서 나머지가 3인 값은 10의 배수에 3을 더한 정수입니다.

그렇기 때문에 해당하는 배열 안의 값들은 23 53 33 입니다.

 

3개의 정수들이 반환되므로, 식은 세 번 실행됩니다.

따라서 answer 값에 1씩 증가되는 일이 세 번 일어나므로 answer 는 3입니다.