My Melody Kawaii

JAVASCRIPT/문제풀이

자바스크립트 오답노트

younajeong 2023. 3. 24. 18:03

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

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

오답노트

 

자바스크립트 20문제 중 틀린문제를 오답노트로 정리했습니다.

 

 

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

오답노트

indexOf는 포함되어 있으면 1 포함이 되어있지 않으면 -1로 표시 됩니다. lastInexOf는 뒤에서 부터 인덱스 값을 불러 오는데 a가 인덱스 위치 3번째에 있으므로 3이라는 숫자를 불러옵니다. includes는 포함하고 있으면 ture 포함되어 있지 않으면 flase로 나타납니다.

 

정답: 1,3,ture

 

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

오답노트

callback함수에서 callback이 먼저 실행이 됩니다. 그리고 func가 위로 올라가서 실행문으로 함수가 실행되었습니다.1로 출력이 되서 나옵니다.

 

 

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

{
    let num = 1;

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

}

오답노트

num1이 num++가 2가 되어서 실행 되었습니다 한번 출력되는데 while문이 반복문이므로 num=2일때 조건에 맞아서 차례대로 3,4,5까지 반복되는데 마지막 6까지 들어가서 실행되었습니다가 총 2,3,4,5,6 5번 나오게 됩니다.

 

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

 

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

}

오답노트

join이라는 메서드는 배열요소를 문자열로 결합하며 문자열로 반환합니다. 따라서 text1은 숫자 중간에 *가 들어가고 text2에는 - text3는 문자열이 붙어 있으므로 띄어쓰기 없이 붙어서 떨어져 있는 문자열은 서로 떨어져서 값이 출력됩니다.

 

정답

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

오답노트

먼저 / 는 나눈다는 의미이고 %는 나머지 값을 구하는 의미입니다. 따라서 

10 /= 10 ;  10나누기 10은 1이므로  i는 1이 출력됩니다. 다음 문제에서 j는 10 i는 1이므로 10-1=9이기 때문에 j의 값은 9입니다.

그리고 k, 30에서 j의 값 9를 나눠주면 3나누어 떨어지므로 정답은 3이 됩니다.

 

정답: i=1 , j=9 , k=3

 

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

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

오답노트

먼저 for문을 출력하면 0이 나옵니다. let temp의 값을 반복한 문제여서 temp에는 0,1,2,3이 들어가서 k++의 영향은 받지 않습니다.

 

정답:0번,1번,2번,3번

 

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

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

정답노트

정답:4,7

 

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

오답노트

먼저 0,1,2,3,4,5,6으로 i의 값이 출력이 되는데 여기서 1을 더해주면 1,2,3,4,5,6,7의 값이 나오늡니다 이 중에서 짝수의 값을 구하는건데 2,4,6으로 값이 나오는데 num[i]넘 안에 있는 배열 요소로 나타내는데 2,4,6번 위치가 인덱스 값에서 1,3,5이므로 num의 인덱스 값 1,3,5번쨰는 5,2,5가 나오게 됩니다.

 

정답: 5, 2, 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("*");
        }
    }
}

오답노트

for문 반복문으로 출력됩니다. 그런데 i--이기 떄문에 뒤에서 부터 9,8,7,6,5,4,3,2,1,0으로 출력이 됩니다. swich문은 조건문으로 여기서 num[i]는 %2 == 1인 조건이므로 홀수면 출력이 되고 default 즉 else아닐 경우는 *출력됩니다.

 

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

 

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

오답노트

먼저 for문에서 0,1,2,3,4,5,6,7이 차례대로 출력이 됩니다. 여기서 if문이 홀수를 구하고 있습니다. 그래서 1,3,5,7로 cnt는 총 4번이 더해지니고 sum = sum + i 로 처음에는 0=0+1 = 1, 1=1+3 =4, 4+5 = 9, 9=9+7=16 이 됩니다.

 

정답 : 4, 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

 

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

오답노트

for of 문은 요소값과 배열의 이름 값이 들어갑니다. 따라서 x는 arr의 배열의 값 25, 23, 11, 47, 53, 17, 33이 들어가는데 여기서 day의 값은 3이므로 나누어 떨어지는 값이 3이 나오는 숫자가 23, 53, 33이 있으므로 총 3번 더해지게 됩니다.

 

정답:3