Blinking Hello Kitty Angel

javascript문제풀이

정보처리기사 오답노트

xoouxa 2023. 4. 22. 15:46

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

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

정보처리기사 기출 문제를 자바스크립트로 변환한 문제들을 풀어보도록 하겠습니다 🙂
저는 엄청 어려웠는데 .. 여러분도 같이 풀어봐요 다 맞으면 바로 기사 시험 준비 접수 고고고고고고고고고고고
😎😎😎😎😎😎😎😎😎😎🙌🙌
 
 
01. 결과값을 작성하시오

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

    console.log(sum) 
}

정답 : 129
해설 : 이 코드는 1부터 10까지의 수를 순회하면서, 각 수가 3으로 나누어질 때마다 해당 수를 빼고, 3으로 나눈 나머지가 1일 때는 해당 수를 더하고, 3으로 나눈 나머지가 2일 때는 해당 수를 곱한 후, 이를 sum 변수에 누적하는 코드입니다.따라서, 이 코드를 실행하면 1부터 10까지의 수를 위 조건에 따라 계산한 결과값이 콘솔에 출력됩니다. 결과값은 -53이 됩니다.
 
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);
}

 
정답 : 50 10
해설 : 이 코드는 주어진 배열에서 최댓값과 최솟값을 찾아 출력하는 코드입니다.
먼저, 변수 num에 주어진 배열 [10, 20, 30, 40, 50]이 할당됩니다. 그리고 max와 min 변수에 배열의 첫 번째 요소 10이 할당됩니다.
그 후 for문을 이용하여 배열의 모든 요소를 검사합니다. num[i]가 max보다 크면 max에 num[i]를 할당하고, num[i]가 min보다 작으면 min에 num[i]를 할당합니다.
마지막으로 console.log() 함수를 호출하여 최댓값과 최솟값을 출력합니다. 따라서 이 코드를 실행하면 50 10이 출력됩니다.
 
03. 결과값을 작성하시오

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

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

정답 :  27
해설 : 함수 func에서 cnt는 현재 항의 번호를 나타내는 변수이고, ret은 현재까지 만들어진 등비 수열의 값입니다. 함수의 반복문에서는 cnt를 1 증가시키고, ret에 diff를 곱한 값을 대입합니다. 그리고 if문에서 cnt가 n과 같아지면 ret을 반환합니다.
반복문이 처음 실행되면 cnt는 2, ret은 3입니다. (1 * 3 = 3)
두 번째 실행에서 cnt는 3, ret은 9입니다. (3 * 3 = 9)
세 번째 실행에서 cnt는 4, ret은 27입니다. (9 * 3 = 27)
cnt가 n과 같아졌으므로 ret인 27이 반환됩니다. 따라서 console.log(func(1, 3, 4)); 코드는 27을 출력합니다.
 
04. 결과값을 작성하시오

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

    console.log(sum)
}

정답 : 25
해설 : i가 10보다 작을 동안 반복문을 실행하는데
i = i+i 반복문이 실행될 때마다 i의 값이 1씩 증가해
1부터 10까지의 값을 가집니다.
i가 짝수라면 continue 를 실행해 반복문의 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.
sum += i 가 홀수인 경우에만 실행되는 코드로, sun에 i를 더해줍니다.
즉 홀수일 경우만 sum에 i의 값을 더합니다.
반복문이 종료된 후 sum의 최종값을 출력합니다
 
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)
}

정답 : [5, 3, 56, 65, 78]
해설 : 꼭 배열로 써줘야 합니다 !
배열 num의 길이가 5이므로, 정렬 알고리즘을 4번 수행합니다. 첫 번째 for 문에서 i는 0으로 초기화되어 있고, 0이면서 1보다 작은 값이므로 첫 번째 for 문의 루프는 한 번만 실행됩니다. 이후, 두 번째 for 문에서는 num의 첫 번째 원소부터 마지막에서 두 번째 원소까지 비교합니다. 만약 j번째 원소가 j+1번째 원소보다 크면, 두 원소의 위치를 바꿔줍니다. 이렇게 하면, 두 번째 for 문의 첫 번째 루프가 끝나면, num 배열에서 가장 작은 원소가 가장 앞에 위치하게 됩니다.

두 번째 for 문의 첫 번째 루프가 끝나면, num 배열에서 가장 작은 원소가 가장 앞에 위치하게 됩니다. 이후, 첫 번째 for 문에서 i를 1 증가시키고, 두 번째 for 문에서는 num의 첫 번째 원소부터 마지막에서 세 번째 원소까지 비교합니다. 이러한 과정을 4번 수행하면, num 배열은 오름차순으로 정렬됩니다.
 
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)
}

 
정답 : 3
해설 :
 
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);
}

정답 : [8,7,5,4,3]
해설 : 꼭 배열로 써줘야 합니다 !
num이라는 배열을 내림차순으로 정렬하는 코드입니다. 배열 num의 길이가 5이므로, 정렬 알고리즘을 4번 수행합니다. 첫 번째 for 문에서 i는 0으로 초기화되어 있고, i가 3보다 작거나 같을 때까지 루프를 실행합니다. 이후, 두 번째 for 문에서는 num 배열에서 i번째 원소 다음부터 마지막 원소까지 비교합니다. 만약 num[i]가 num[j]보다 작다면, num[i]와 num[j]의 위치를 바꿔줍니다. 이렇게 하면, 두 번째 for 문의 첫 번째 루프가 끝나면, num 배열에서 가장 큰 원소가 가장 앞에 위치하게 됩니다.

첫 번째 for 문의 첫 번째 루프가 끝나면, num 배열에서 가장 큰 원소가 가장 앞에 위치하게 됩니다. 이후, 첫 번째 for 문에서 i를 1 증가시키고, 두 번째 for 문에서는 num의 i번째 원소 다음부터 마지막에서 두 번째 원소까지 비교합니다. 이러한 과정을 4번 수행하면, 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));
}

정답 : 10
해설 : arr 배열의 각 요소들이 순회하며 sum변수에 더해집니다.
따라서 sum은 1+2+3+4+5로 15가 됩니다.

두번째 for문이 실행되면서 arr배열의 각 요소를 다시 순회해 짝수인 경우 해당값이 sum에서 빠집니다.
2와 4는 짝수이므로 sum에서 각각 2와 4를 빼주어 sum은 15-2-4로 계산되어 9가 됩니다.
최종적으로 func함수는 sum 변수의 최종값인 9를 반환합니다.
 
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)
}

정답 : 85
해설 : for문이 실행되며 num 배열의 각 요소를 순회해 현재 인덱스 i에 1을 더한 값을 num[i]에 할당합니다.
따라서 배열은 [1,2,3,4,5,6,7,8,9,10]로 변경됩니다.

두번째 for루프가 실행되면서 num 배열의 각 요소를 다시 순회해 현재 인덱스i를 3으로 나눠 나머지가 1인 경우, 해당 값인 num[i]를 sum 변수에서 빼줍니다.

따라서 num[1], num[4], num[7] 이 각각 2,5,8이 되어 sum에서 각각 2,5,8 을 빼줘 sum은 100 - 2 - 5 - 8로 계산되어
85가 됩니다.
 
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]);
        }
    }
}

정답 : 2,4,6
해설 : arr배열의 각 요소를 순회하며, 현재 인덱스 i에 해당하는 arr[i]와 temp[i]의 값이 같은 경우, flag 변수를 true 로 설정합니다. 그렇지 않은 경우, flag 변수를 false로 설정하고 temp배열의 idx인덱스에 arr[i]값을 할당하고 console.log(temp[idx])를 통해 해당 인덱스값을 출력합니다.

idx 변수는 temp 배열의 인덱스를 나타내며, arr배열과temp배열의 값이 다를 때마다 temp 배열의 해당 인덱스에 arr[i]값을 할당하고, console.log(temp[idx])를 통해 해당 인덱스의 값을 출력합니다.
따라서 console.lof(temp[idx])는 temp 배열에 새로운 값을 할당한 후에 출력되므로 이전 값이 출력되는 것이 아니라 현재 값이 출력됩니다.

for문이 종료되고 console.log(temppidx])를 통해 마지막으로 할당된 temp, idx 인덱스의 값을 출력합니다.

따라서 temp 배열에 할당된 값들 중 마지막 값이 출력됩니다.
 
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);
}

 
정답 : num [i]
해설 : 이 코드는 배열 num 안에 있는 값 중 가장 작은 값을 찾는 코드입니다. 코드를 살펴보면, 먼저 let 키워드를 사용하여 num이라는 이름의 배열을 선언하고, 5개의 정수 값을 할당합니다.

다음으로 min이라는 이름의 변수를 9999라는 큰 값으로 초기화합니다. 이는 num 배열 안에 들어갈 수 있는 가장 큰 값보다 큰 값을 할당하여, min 변수에 배열 안의 값 중 가장 작은 값을 할당할 수 있도록 하는 것입니다.

그리고 for 루프를 이용하여 num 배열의 모든 요소를 확인합니다. for 루프의 조건식은 i<5가 되어 있는데, 이는 num 배열에는 5개의 요소가 있으므로 인덱스 범위를 벗어나지 않도록 하기 위함입니다.

for 루프 안에 if 문을 사용하여 현재까지의 최솟값보다 더 작은 값이 있으면, min 변수를 해당 값으로 업데이트합니다. if 문의 조건식에서는 min > num[i]을 사용하여 현재까지의 최솟값과 num 배열의 각 요소를 비교하고, 만약 num[i]의 값이 더 작으면 min 변수를 num[i] 값으로 업데이트합니다. 따라서 빈 칸에는 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)
}

정답 : Remember And you
해설 : let 키워드를 사용하여 s1이라는 이름의 문자열 변수를 선언하고, "Remember november"라는 문자열을 할당합니다.

다음으로, s1 문자열에서 slice() 메서드를 사용하여 새로운 문자열 s2를 생성합니다. slice() 메서드는 문자열의 일부분을 추출하는데 사용되며, 첫 번째 매개변수는 추출할 부분의 시작 인덱스를, 두 번째 매개변수는 추출할 부분의 마지막 인덱스 + 1을 지정합니다. 즉, s1.slice(0, 3)은 s1 문자열의 첫 3글자를 추출하고, s1.slice(12, 16)은 s1 문자열에서 12번 인덱스부터 15번 인덱스까지의 문자열을 추출합니다. 따라서 s2 변수에는 "Remem" + "ber "가 할당됩니다.

그리고 s3라는 이름의 또 다른 문자열 변수를 선언하고, "r 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 );
}

정답 : falls, true, 4, 0, 1
해설 :  
!(x>0) 는 x가 0보다 클 경우 flase를 그렇지 않을 경우 true를 반환합니다.
x의 초기값이 1이므로 x>0은 true가 되고, !연산자에 의해 false가 출력됩니다.

x>0 || x<4 는 x가 0보다 크거나 x가 4보다 작은 경우 trhe 를 반환합니다.

 
14. 결과값을 작성하시오

{
    let num = 0;
    let i = 1;

    while(i<=50){
        if(i%7 == 0){
            num += i;
        }
        i++;
    }
    console.log(num)
}

정답 : 196
해설 : while 반복문을 사용하여 i가 50 이하일 때까지 반복합니다. 반복문 내부에서는 if 조건문을 사용하여 i가 7의 배수인 경우에만 num에 i를 더해줍니다.

반복이 끝나면 console.log() 함수를 사용하여 num 변수의 값을 출력합니다. 이 값은 1부터 50까지의 정수 중 7의 배수인 숫자들의 합이 됩니다.

따라서 전체 코드의 결과는 7, 14, 21, 28, 35, 42, 49을 더한 196이 됩니다.
 
15. 결과값을 작성하시오

{
    let result = 0;
    for(let i=1; i<999; i++){
        if(i%3==0 && i%2 !=0){
            result = i;
        }
    }
    console.log(result);
}

정답 : 993
해설 : let result = 0;: 결과값을 저장할 변수 result를 0으로 초기화합니다.

for(let i=1; i<999; i++): 1부터 998까지 반복하는 for 루프를 시작합니다.

if(i%3==0 && i%2 !=0): 현재 숫자 i가 3의 배수이면서 2의 배수가 아닌 경우를 판별합니다.

result = i;: 해당 조건을 만족하는 숫자 i를 결과값 변수 result에 저장합니다.

console.log(result);: 가장 큰 조건을 만족하는 숫자 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();
}

정답 : 9
해설 : func 함수는 인자로 num을 받습니다.
num이 1 이하이면 1을 반환합니다.
그렇지 않으면 num에 num-2를 더한 값을 반환합니다.
main 함수에서는 num을 5로 초기화하고, func(num)을 호출하여 결과를 출력합니다.
func(5)를 호출하면 5 + func(3)을 반환합니다.
func(3)를 호출하면 3 + func(1)을 반환합니다.
func(1)을 호출하면 1을 반환합니다.
따라서 main 함수에서는 5 + 3 + 1 = 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)

정답 : 21
해설 : 피보나치 수열의 7번째 값을 계산하는 예제입니다.

먼저 let 키워드를 사용하여 a, b, num이라는 이름의 변수를 선언하고, 각각 1, 1, undefined를 할당합니다. 이 변수들은 피보나치 수열의 각 항을 계산하고 저장하는 데 사용됩니다.

그리고 for 반복문을 사용하여 0부터 5까지 6번 반복합니다. 반복문 내부에서는 먼저 a와 b를 더한 값을 num에 할당합니다. 그리고 a 변수에는 이전 항의 값을, b 변수에는 현재 항의 값을 할당합니다.

반복문이 끝나면 console.log() 함수를 사용하여 num 변수의 값을 출력합니다. 이 값은 피보나치 수열의 7번째 항을 계산한 결과가 됩니다.

따라서 전체 코드의 결과는 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)
}

정답 : 1024
해설 : 여기서 함수 func는 num1을 num2번 곱하는 것을 구현합니다. for문을 사용하여 num2번 만큼 num1을 곱하고 결과 값을 res 변수에 저장한 후에 res를 반환합니다.

그리고 함수 func를 호출할 때는 num1로 2를, num2로 10을 전달하였습니다. 따라서 함수 func의 반환 값은 2의 10승인 1024가 되며, 이 값이 변수 res에 저장됩니다. 마지막으로 console.log 함수를 사용하여 변수 res의 값을 출력합니다. 따라서 이 코드의 실행 결과는 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;
    }
}

정답 :
0
1
2
3
해설 : a 배열의 길이만큼 반복문을 돌면서, 배열의 값들을 출력합니다.
이 경우, n 값이 4이므로, num 배열에는 0, 1, 2, 3 이 저장되어 있습니다.
func 함수는 인자로 받은 n 값 만큼 num 배열을 초기화하고, 배열의 값을 순서대로 할당합니다.
for 반복문에서 i는 0부터 n-1까지 증가합니다.
num 배열의 각 인덱스에 i 값을 할당합니다.
마지막으로 num 배열을 리턴합니다.
 
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)
    }
}

정답 : 7
해설 : 조건문에서 사용된 논리 연산자 &와 ^는 각각 논리곱(AND), 배타적 논리합(XOR)을 의미합니다. 비트 연산자 |와 !=는 해당 비트를 OR 연산하거나, 값이 다른지 비교하는 용도로 사용됩니다.

여기서 조건문을 하나씩 분석해보면,

(a == 2 | a == c)
변수 a가 2 또는 c와 같으면 참을 반환합니다.
!(c > d)
c가 d보다 크지 않으면 참을 반환합니다.
(1 == b ^ c != d)
b가 1이고, c와 d가 서로 다르면 참을 반환합니다.
먼저 a에 b와 c의 합인 7이 대입됩니다. 그리고 (7 == b ^ c != a) 논리식이 평가됩니다.
여기서 ^는 배타적 논리합으로, 두 비트가 다를 때 1을 반환하며, 같으면 0을 반환합니다. 그래서 b ^ c의 결과는 5입니다. 이 값을 다시 5 != a와 비교하면, a의 값이 7이므로 참을 반환합니다. 이렇게 참을 반환한 경우 console.log(a)가 실행되어 7이 출력됩니다.
만약 논리식이 거짓이면 else 블록이 실행되며, console.log(b)가 실행됩니다. 이 경우 b의 값인 4가 출력됩니다.

여러분도 한 번 문제를 풀어보세요 !
🥰 오늘도 감사합니다