Lumpy Space Princess - Adventure Time

CODING

3월 26일 공부

jongyung 2023. 3. 26. 18:40

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

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

자바스크립트 테스트05 재시험을 오답 정리해봤다.

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

{
    const str = "javascript refercence";

    str.indexOf("javascript");     
    str.indexOf("javascripts");     
    str.indexOf("j");              
    str.indexOf("J");               
    str.indexOf("a");              
    str.indexOf("ja");             
    str.indexOf("jv");              
    str.indexOf("refercence");      
    str.indexOf("r");              
    str.indexOf("re");              
    str.indexOf("javascript", 0);  
    str.indexOf("javascript", 1);   
    str.indexOf("refercence", 0);   
    str.indexOf("refercence", 11);  
    str.indexOf("refercence", 12);  
    str.indexOf("r", 7);            
    str.indexOf("r", 12);           
}

답: 5개


02. 다음의 결괏값을 작성하시오.
{
    function func(){
        console.log("함수1가 실행되었습니다.");
    }
    function callback(str){
        console.log("함수2가 실행되었습니다.");
        str();
    }
    callback(func);
}
답: 함수2가 실행되었습니다. 함수1가 실행되었습니다.


프로그래밍에서 콜백(callback) 또는 콜백 함수(callback function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 
콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.

콜백 함수가 왜 필요한가요?
자바스크립트는 코드를 위에서 아래로 순차적으로 실행합니다. 그러나, 코드가 다른 행위가 일어난 뒤에 실행되는 경우도 있고 순차적으로 실행되지 않을 때도 있습니다. 이런 걸 비동기 프로그래밍이라고 합니다.

콜백은 태스크가 끝나기 전에 함수가 실행되지 않는 것을 보장합니다. 다르게 말하자면 콜백은 그 태스크가 끝난 직후에 실행될 것입니다. 콜백은 비동기 자바스크립트 코드를 작성할 수 있도록 해주고 여러 문제와 에러들로부터 안전하게 지켜줍니다.

자바스크립트에서 콜백 함수를 만드는 방법은 어떤 함수의 파라미터로써 함수를 넘기고 어떤 행위나 태스크가 완료된 직후에 콜백 함수를 호출하는 것입니다.

callback 함수를 먼저 실행하고, 그 다음에 선언적 함수 실행

03. 결괏값을 작성하시오.
{
    function func(){
        let a = [];

        for(i=1; i<=5; i++){
            a += [i];
        }
        console.log(a);
    }
    func();
}
답: [1 2 3 4 5]


빈 배열 a 에 1 부터 5까지의 i 값을 채워 넣는 법

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

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


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();
    info2.result();
    info3.result();
}

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


06. 결괏값을 작성하시오.
{
    function func(index){
        console.log("함수가 실행되었습니다." + index);
    }
    function callback(num){
        for(let i=0; i<=5; i++){
            num(i);
        }
    }
    callback(func);
}

답: 함수가 실행되었습니다.0함수가 실행되었습니다.1함수가 실행되었습니다.2함수가실행되었습니다.3함수가 실행되었습니다.4함수가 실행되었습니다.5


07. 결괏값을 작성하시오.
{
    let num = 0;

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

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

0부터 3까지의 정수의 갯수만큼 실행하므로, 네 번 반복

08. 결괏값을 작성하시오.
{
    const arr = [100, 200, 300, 400, 500];

    const text1 = arr.join("*");
    arr.push("600");
    const text3 = arr.join("");
    arr.pop();
    const text4 = arr.join(" ");

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

답: 100*200*300*400*500 
      100200300400500600

      100 200 300 400 500


pop() 메서드는 배열 마지막 요소를 삭제합니다.
push() 메서드는 배열 마지막 요소에 요소를 추가합니다.

09. 다음을 결과값을 작성하시오.
{
    let a, b = 10;

    for(let i=0; i<5; i++){
        a = i;
        b -= a;
    }
    console.log(a, b)
}

답: 4 0


a와 b는 10이라는 값이 주어져 있습니다.
for 문에서 i 의 값은 정수 0부터 4까지의 값들이 1씩 증가하는데, 
이 때 a 의 값이 이 i 의 값으로 바뀝니다.
b 의 값은 10에서 시작해서 a 값을 뺀 수로 변합니다.

풀어서 써보면,
a = 0, b = 10 - 0 = 10
a = 1, b = 10 - 1 = 9
a = 2, b = 9 - 2 = 7
a = 3, b = 7 - 3 = 4
a = 4, b = 4 - 4 = 0

10. 다음을 결과값을 작성하시오.
{
    function func(){
        let i = 20, j = 20, k = 30;
        i /= j;
        j -= i;
        k %= j;

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

답: 1 19 11


11. 다음을 결과값을 작성하시오.
{
    let k = 1;
    let temp;
    for(let i=0; i<=3; i++){
        temp = k;
        k++;
        console.log(temp + "번");
    }
}

답: 1번 2번 3번 4번


12. 다음을 결과값을 작성하시오.
{
    let num1 = 3;
    let num2 = 7;
    if(++num1 > 5 || num2++ < 1){
        console.log(num1);
    }
    console.log(num2)
}

답: 8


전치와 후치 그리고 논리 연산자가 있는 if 문 입니다.

풀어서 써보면, 
1 + 3 > 5 OR 7 + 1 < 1 입니다.
4는 5보다 작으므로 false, 8은 1보다 크므로 false 입니다.
false OR false 값은 false 입니다.
따라서 if 문은 실행이 되지 않아서 값을 반환하지 않습니다.

결과적으로 if 문 밖에 써있는 실행문만 실행됩니다.
이 때 num2는 후치가 걸려있으므로, 7 + 1 의 값인 8이 나옵니다.

13. 다음을 결과값을 작성하시오.
{
    let num = [1, 5, 1, 2, 7, 5];
    for(let i=0; i<6; i++){
        if((i+2) % 2 == 0){
            console.log(num[i]);
        }
    }
}

답: 5 2 5


14. 다음을 결과값을 작성하시오.
{
    let num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for(let i=0; i<=9; i++){
        switch(num[i] % 2){
            case 1:
                console.log(num[i]);
                break;
            default:
                console.log("**");
        }
    }
}

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


15. 다음을 결과값을 작성하시오.
{
    let cnt = 0;
    let sum = 0;
    for(let i=0; i<=7; i++){
        if(i%2 == 1){
            cnt++;
            sum += i;
        }
    }
    console.log(cnt + ", "+sum/2);
}

답: 4, 8


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

답: 3 90


17. 다음을 결과값을 작성하시오.
{
    let a, b, result;
    a = 7, b = 4
    result = a | b;

    console.log(result)
}

답: 7


18. 다음을 결과값을 작성하시오.
{
    function solution(a, b, c){
        let answer = "YES", max;
        let total = a + b + c;

        if(a > b) max = a;
        else max = b;
        if(c > max) max = c;
        if(total-max <= max) answer = "NO"; 
        
        return answer;
    }
    console.log(solution(53, 93, 107));
}

답: YES


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(15, 12, 11));
}

답: 11


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, 40];
    console.log(solution(0, arr));
}

답: 1