Javascript Test05

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

{
    function func(){
        let i = 10, hap = 0;
        while(i > 1){               // ① i가 1보다 작아질 때까지...
            if( i % 3 == 1){        // ③ i를 3으로 나눴을 때 나머지 값이 1이 남는 것 ==  10, 7, 4
                hap += i;           // ④ hap에다가 10+7+4 저장함
            }
            i--;                    // ② 10, 9, 8, 7... 작아짐
        }
        document.write(hap);        // 결론적으로 ④ 10+7+4의 합인 21이 답이 된다.
    }
    func();         // 정답 == 21
}

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

{
    function func(){
        let a = [];        // ① 배열 비어있음.

        for( i=1; i<=5; i++){        // ② i가 5가 될 때까지 i 수를 늘림 1,2,3,4,5
            a += [i];                   // ③ 비어있던 a 배열에 1,2,3,4,5 저장됨
        }
        document.write(a[2]);           // ④ a의 두번째 배열은 3임
        
    }
    func();         // 정답 == 3
}

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

{
    function func(){
        let a = [1,2,3,4,5,6,7,8,9], cnt = 0;

        for( i=0; i<a.length; i++ ){     // i가 9를 넘지 않는 8이 될때까지 i 값 계속 추가됨
            if( a[i] % 2 == 0){             // ① a[0]부터 a[8]까지 값 중 2로 나눴을 때 나머지가 0인 값
                cnt = cnt + 1;              // ② '①'의 조건에 충족하는 횟수만큼 1씩 저장
            }                               // 해당 조건을 충족하는 수 == 2,4,6,8 / 총 4개
        }
        document.write(cnt);                // 정답 == 4
    }
    func();
}

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

{
    function func(data, exp){   // data == 1 / exp == 5 대입
        let result = 1;
        for( i=1; i<exp; i++){   // i가 4가 될 때까지
            result = result * i;

            // 1*1 = 1
            // 1*2 = 2
            // 2*3 = 6
            // 6*4 = 24
        }
        document.write(result + data);      // 정답 : 24 + 1 == 25
    }        
    func(1, 5);
}

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

{
    function func(){
        let a = [2,3,2,4,5,6,7,2,3,3,2];
        let value = 0;
        for( i=0; i<a.length; i++){      // i가 10이 될때까지
            if( a[i] != 2 ){    // a 배열 중 2가 아닌 데이터가 있으면
                value++;        // value수를 증가시켜라
            }
        }
        document.write(value);  // 2 아닌 데이터 개수가 7개임
                                // 정답 == 7
    }
    func();
}

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

{
    function func(){
        let i, j = 0;

        for( i=0; i<=8; i++){        // i가 8이 될 때까지
            j += i;                     // 계속 늘어나는 i값을 j에 저장시켜라

            // j == 0+1+2+3+4+5+6+7+8
            // i의 개수는 0부터 8까지 총 9개임
        }
        document.write(j+i)             // 36 + 9 == 45
    }
    func();
}

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

{
    function func(){
        let a = 12, b = 8, c = 2, d = 3;
        a /= b - c * d;

        // 12 ÷ ( 8 - 2 × 3 )
        // 12 나누기 2
        // 6

        document.write(a);  // 6
    }
    func();
}

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

{
    function func13(){
        let a, b, c, result;
        a = 10;
        b = 20;
        c = 30;
        result = a < b ? b/a : c;

        // 10보다 20이 클 경우 b를 a로 나눠라 == 20/10  ||   아닌 경우 c 출력하라는 뜻
        // 20을 10으로 나누면 2가 됨

        document.write(result);         // 정답 == 2
    }
    func13();
}

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

{
    function func(){
        let a = 0, sum = 0;
        while( a < 10 ){     // a가 10이 될때까지
            a++;                // a값 증가시켜라
            if(a % 2 == 1) continue;        // a를 2로 나눈 나머지가 1이 되는 값 건너뛰기
            sum += a;                       // 건너뛴 값 제외하고 a값 sum에 저장

            // a를 2로 나눈 나머지가 1이 되는 값 == 1, 3, 5, 7, 9 이것들, 즉 홀수 건너뜀
            // 2+4+6+8+10 == 30
        }
        document.write(sum);    // 정답 == 30
    }
    func();
}

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

{
    function func(){
        let i = 0, sum = 0;
        while( 0 ){         // 함정문제임. 0이 들어가기 때문에 실행X 정답은 == 0 
            i++;
            if( i > 10 ) break;
            if( i % 5 == 0) continue;
            sum += i;
        }
        document.write(sum);
    }
    func();
}

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

{
    function test(arrData){
        let result = 0;
        for( let i=0; i<arrSubject.length; i++ ){    // i값 3만큼 증가시킴
            result += Number(arrSubject[i]);            // Number(arrSubject[0]부터 [3]을 더한 총값)을 result에 저장
        }
        let num = result            // num 변수에 100+90+80+70 == 340 저장됨
        return num;                 // num 값 리턴(출력)
    }
    let arrSubject = ["100", "90", "80", "70"];
    let result = test(arrSubject);

    document.write(result);     // 정답 == 340
}

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

{
    function func(a, b, c){
        let answer;
        if(a < b) answer = a;        // 만약 2 < 5 이면 answer = 2  | 참이므로 answer에 2저장
        else answer = b;                // 거짓일 경우 answer에 5 저장  | 참이었기 때문에 무시
        if(c < answer) answer = c;   // 10 < 2일 경우 answer에 10을 저장시켜야 함 | 거짓이기 때문에 무시함
        document.write(answer);         // 최종적으로 answer == 2가 됨
    }
    func(2, 5, 10)                      // 정답 == 2
}

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

{
    function func(n){       // n == 178
        let answer;         
        answer = Math.floor(n/12);      // 178 / 12 값 == 14.83333... 사사오입(반올림)하면 15지만 Math.floor를 쓰면 반올림을 하지 않음 / 즉 반내림(?)을 함
        return answer;                  // 정답 == 14
    }

    document.write(func(178));
}

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

{
    function func(s){
        let answer = "";
        for(let x of s){        // x 변수에 "webstoryboy" 문자열 저장
            if( x != 'w') answer += '#';    // x 중 'w'가 아닌 것들을 '#'으로 바꾼다
            else answer += x;       // 아니면 그대로 두기?
        }
        return answer;              // "webstoryboy" 중 w가 아닌 걸 전부 #으로 바꿈
                                    // 정답 == w##########
    }
    
    let str = "webstoryboy";
    document.write(func(str));
}

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

{
    function func(s, t){
        let answer = 0;
        for(let x of s){        // "wbestoryboy"를 x 변수에 저장
            if(x !== t) answer++;   // x 중 't'가 아닌 글자수만큼 answer값 1씩 증가시키기
        }
        return answer;              // t 아닌 글자가 총 10자이므로
                                    // 정답 == 10
    }
    
    let str = "wbestoryboy";
    document.write(func(str, 't'));
}

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

{
    function func(s){  
        let answer = "";
        for(let x of s){                        // "webStorBOY10"가 담긴 s값을 x변수에 저장
            if(x === x.toUpperCase()) {         // x에서 대문자로 되어있는 부분을
                answer += x.toLowerCase();      // 소문자로 바꿔라
            } else {                            // 반대로 소문자로 되어 있는 부분은
                answer += x.toUpperCase();      // 대문자로 바꿔라
            }
        }
        // 즉 대문자 부분은 소문자로, 소문자 부분은 대문자로 바꾼 것이 답이 됨.
        return answer;                          // 정답 == WEBsTORboy10
    }

    document.write(func("webStorBOY10"));
}

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

{
    function solution(n) {
        var answer = [];
        answer = n.toString().split('').reverse().map(val => parseInt(val));

        // n을 toString으로 숫자에서 문자열로 바꿈
        // split 안에 ''를 넣음 -> 하나하나 쪼개짐 ['1', '2', '3', '4', '5'] 이런 식으로...
        // reverse를 통해 배열 안의 값을 전부 거꾸로 정렬함 ['5', '4', '3', '2', '1'] 
        // map(val => parseInt(val)) : 다시 문자열을 숫자(정수)로 변환하고
        // 배열(괄호 안에 데이터)형태가 아닌 데이터를 반환해냄
        // 즉, 5,4,3,2,1 이렇게 출력함.

        return answer;      // 정답 == 5,4,3,2,1
    }
    
    document.write(solution(12345))
}

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

{
    function solution(arr, divisor) {
        var answer = [];
        
        const div = arr.filter( el => el % divisor == 0 );    
        // filter로 2로 나눴을 때 나머지값이 0인 (즉 2의 배수인) 값을 골라냄 == 2, 4

        answer = div.length > 0 ? div.sort( (a, b ) => a - b ) : [-1];
        // div.length(2) > 0이 참임 : 참이면 div안의 순서를 a-b 순서로 정렬하고 거짓이면 -1 출력(맞나?)
        
        return answer;      // 결론적으로 a-b 순서대로 [2, 4] 출력됨
                            // 정답 == 2,4
    }
            
    document.write(solution([1,2,3,4,5], 2))
}

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

{
    function solution(numbers) {
        let answer = 0;
        for(let i=0; i<10; i++){     // i 안에  0부터 9까지
            if(!numbers.includes(i)){   // 0부터 9까지의 숫자 중에 numbers 배열 안에 없는 값 == 5,9
                answer += i;            // 5+9 == 14
            }
        }
        return answer;                  // 정답 == 14
    }
    document.write(solution([1,2,3,4,6,7,8,0]))
}

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

{
    function solution(n) {
        for(let i=1; i<n; i++) {     // i를 1부터 9까지
            if(n%i === 1) return i;     // 10을 1~9로 나눴을 때 나머지가 1인 경우 i를 출력 == 10을 3,9로 나눌 때 1이 남음

            // return 위치가 for문 안에 있으므로 3이 나왔을 때 바로 종료시켜서 9는 무시하고 3이 출력됨
        }
    }

    document.write(solution(10))            // 정답 == 3
}