Post

26일 시험 오답노트 1-2

오답노트

매주 금요일에 시험본 문제들을 하나씩, 그리고 한줄씩 정리합니다! 오답노트라고 적혀있긴 하지만 맞췄던 문제들도 복습한다는 생각으로 같이 정리해서 주말동안에 나눠서 올릴 예정입니다.

열한번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

1
2
3
4
5
 let a, b, result;
    a = 7, b = 4
    result = a | b;

    console.log(result)

문제 풀이

a, b, result의 초깃값

  • a는 7, b는 4, result의 값은 선언되지않았습니다.

계산식

  • result: or문이 끝난뒤 a 혹은 b의 값이 저장됩니다. 따라서 값은 7이 됩니다.
  • 2진수로 계산하기: 7은 0111, 4는 0100입니다. 자세한 식은 아래를 참고해주세요.

풀이 및 정답.

a의 2진수 계산하기

계산식나눈 몫나머지 값
7 % 231
3 % 211
1 % 210

따라서 7의 2진수 값은 0(나머지값), 111(나눈 몫)입니다.

b의 2진수 계산하기

계산식나눈 몫나머지 값
4 % 220
2 % 210
1 % 210

따라서 4의 2진수 값은 0(나머지값), 100(나눈 몫)입니다.

OR

계산식
a0111
b0100
result0111

따라서 result의 값은 7입니다.

열두번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
 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));

문제 풀이

solution a, b, c의 값

  • a, b, c의 값은 아래 콘솔로그에서 선언되었습니다. a: 53, b: 93, c: 107입니다.

비교문

  • 첫번째 비교문: a의 값이 b보다 클경우 max의 값이 a가 저장되지만 이 경우에는 53 > 93이기에 else가 실행되어 max값은 93이 됩니다.
  • 두번째 비교문: c가 max값보다 클경우 max의 값은 c의 값으로 변경됩니다. 이 경우에는 조건문이 충족되기에 max값은 107이 됩니다.
  • 세번째 비교문: a + b+ c의 값인 253과 max값을 뺀 값이 max 값보다 작거나 같을때 “NO”를 출력합니다.

정답

  • total값인 253과 max값인 107을 빼면 146이 나오는데 이 경우 107보다 크기에 YES가 출력됩니다.

열세번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

1
2
3
4
5
6
7
8
 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));

문제 풀이

a, b, c의 값과 answer의 값

  • a, b, c의 값은 아래 콘솔로그에서 선언되었습니다. a: 15, b: 12, c: 11입니다. 또한 answer의 경우에는 아래 비교문에 따라 값이 변경됩니다.

비교문

  • 첫번째 비교문: a의 값보다 b가 클 경우 answer의 값은 a가 됩니다. 만약 아닐경우에는 else로 넘어가 b가 입력됩니다. 따라서 answer의 값은 12입니다.
  • 두번째 비교문: answer의 값이 c보다 크거나 같을 경우에는 answer의 값이 c의 값으로 변경됩니다. 따라서 12는 11보다 크기에 answer의 값은 11이 됩니다.
  • 종료: answer의 값을 출력합니다.

정답

  • 11

열네번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

1
2
3
4
5
6
7
8
9
10
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));

문제 풀이

solution

  • solution의 매개변수는 day, arr이며 각각의 값은 콘솔로그에 선언되어있습니다.

계산식

  • answer:answer의 값은 0으로 선언되었습니다.
  • let x of arr: x는 Element이므로 arr의 또다른 이름이 됩니다.
  • x % 10 == day: x와 10을 나눈 값의 나머지가 day와 같을경우 answer의 값이 증가합니다.

풀이 및 정답

x계산식나머지 값
2525 % 105
2323 % 103
1111 % 101
4747 % 107
5353 % 103
1717 % 107
3333 % 1033
4040 % 100
1
1

열다섯번째 문제의 값 구하기

아래의 문제에서는 result의 출력값을 구해야합니다.

1
2
3
4
5
let a, b, result;
    a = 7, b = 4
    result = a & b;

    console.log(result);

문제 풀이

a, b, result의 초깃값

  • a는 7, b는 4, result의 값은 선언되지않았습니다.

계산식

  • result: AND문이 끝난뒤 a 혹은 b의 값이 저장됩니다. 따라서 값은 4가 됩니다.
  • 2진수로 계산하기: 7은 0111, 4는 0100입니다. 자세한 식은 아래를 참고해주세요.

풀이 및 정답.

a의 2진수 계산하기

계산식나눈 몫나머지 값
7 % 231
3 % 211
1 % 210

따라서 7의 2진수 값은 0(나머지값), 111(나눈 몫)입니다.

b의 2진수 계산하기

계산식나눈 몫나머지 값
4 % 220
2 % 210
1 % 210

따라서 4의 2진수 값은 0(나머지값), 100(나눈 몫)입니다.

AND

계산식
a0111
b0100
result0100

따라서 result의 값은 4입니다.

열여섯번째 문제의 값 구하기

아래의 문제에서는 result의 값을 구해야합니다.

1
2
3
4
5
let a = 6, b = 9, c = 3, result;
    result = ++a + b++ + ++c;

    console.log(result);
    console.log(a + b + c);

문제 풀이

num1, num2의 초기값

  • a: 6, b: 9, c: 3 result의 값은 선언되지않았습니다.

계산식

  • ++의 위치: ++가 앞에 있는 경우에는 조건식의 처음부터 값이 증가하고 ++가 뒤에 있는 경우에는 조건식이 한번 끝난후에 값이 증가됩니다.
  • result: a와 b, c의 값을 더한 값이 result의 값이 됩니다. 따라서 7 + 9 + 3의 합인 20이 result의 값이 됩니다.
  • 조건문: result의 계산이 끝나 b의 값이 증가합니다. 따라서 b의 값은 10이 됩니다.

정답

1
2
20
21

열일곱번째 문제의 값 구하기

아래의 문제에서는 a와 b의 출력값을 구해야합니다.

1
2
3
4
5
6
7
 let a, b = 10;

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

문제 풀이

a와 b의 초기값

  • a와 b의 초깃값은 10으로 선언되었습니다.

조건식 반복문

  • 조건식: i는 0부터 시작되며 i의 값이 5보다 작아야 합니다. 그리고 조건이 충족될떄까지 조건문이 끝날 때마다 i의 값이 1씩 증가합니다.
  • {}: 조건이 맞을때마다 안에 들어가서 실행합니다.
  • a의 값 변경: a의 값은 i의 값으로 변경됩니다. 첫번쨰 실행에서는 i가 0부터 실행되기 떄문에 a의 값은 0이 됩니다.
  • b의 값 변경: b의 값에 a의 값을 뺴야합니다. 첫번쨰 실행에서는 a가 0이기 때문에 b의 값은 변경되지 않습니다.
  • 반복문: i의 값이 5와 같아지기 전까지 반복되며 a의 값이 증가됨에 따라 b의 값은 감소되어 저장됩니다.

과정과 정답

1
2
3
4
5
6
7
a = 0; b = 10;
a = 1; b = 9;
a = 2; b = 7;
a = 3; b = 4;
a = 4; b = 0;

4 0

열여덟번째 문제의 값 구하기

아래의 문제에서는 num의 출력값을 구해야합니다.

1
2
3
4
5
6
7
8
let num = 10;
    num += 2;
    num -= 3;
    num *= 5;
    num /= 5;
    num %= 9;

    console.log(num)

문제 풀이

num의 배열값

  • num은 10으로 선언되며 아래의 계산식에 따라 값이 변경됩니다.

계산식 및 정답

계산식
10 += 2 =12
12 -= 3 =9
9 *= 5 =45
45 /= 5 =9
9 %= 90
1
0

열아홉번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

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

문제 풀이

num의 초깃값

  • num의 배열값에는 1, 5, 1, 2, 7, 5이 있습니다.

계산식

  • i: i는 인덱스의 값이며 0부터 시작하여 6과 값이 같아질때 반복문이 종료됩니다. 조건문이 한번 끝날때마다 i의 값이 1씩 증가합니다.
  • if: i의 값이 6보다 작을때 실행되며 i의 값에 2를 더한뒤 2를 나눈 나머지 값이 0일때 콘솔로그에 출력됩니다.

정답

Elementi(Index)더하기나머지 값
100 + 2 = 22 % 2 = 0 (true)
511 + 2 = 33 % 2 = 1 (false)
122 + 2 = 44 % 2 = 0 (true)
233 + 2 = 55 % 2 = 1 (false)
744 + 2 = 66 % 2 = 0 (true)
555 + 2 = 77 % 2 = 1 (false)
1
1, 1, 7

스무번째 문제의 값 구하기

아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let data = [10, 6, 7, 9, 3];
let temp;

for (let i = 0; i < 4; i++) {
    for (let j = i + 1; j < 5; j++) {
        if (data[i] > data[j]) {
            temp = data[i];
            data[i] = data[j];
            data[j] = temp;
        }
    }
}

console.log(data)

문제 풀이

data, temp의 초깃값

  • data의 값은 10, 6, 7, 9, 3이며 배열로 선언되었고 temp의 값은 선언되지 않았습니다.

    버블 정렬 알고리즘

  • 버블 정렬은 서로 인접한 두 개의 숫자를 비교해서 큰 숫자를 뒤로 보내는 방식으로 정렬하는 알고리즘입니다.

계산식

외부 for문
1
for (let i = 0; i < 4; i++)

이 부분은 i는 0부터 시작해서 4보다 작은 3이 될때까지 실행하게 됩니다. 위의 코드를 예로들면 배열의 길이는 5지만 4번만 반복하게 됩니다. 이렇게 하는 이유는 마지막 요소가 자동으로 정리되기 때문입니다.

내부 for문
1
for (let j = i + 1; j < 5; j++)

이 부분은 j는 i의 값에 1을 추가한 1부터 시작되며 5보다 작은 4가 될때까지 반복하여 총 4번 반복하게 됩니다. 이렇게 하는 이유는 인덱스 i부터 시작하여 배열의 끝까지 비교하기 위함입니다.

요소 비교
1
if (data[i] > data[j])

이 부분은 data[i]와 data[j]의 요소를 비교합니다. 만약 data[i]가 더 크다면 두 요소를 교환하게 됩니다.

temp의 값 변경
1
temp = data[i]

이 부분은 data[i]의 값이 temp에 저장합니다.

data[i] 값 변경
1
data[i] = data[j]

이 부분은 현재 요소 data[i]에 data[j]의 값을 저장합니다.

data[i] 값 변경
1
data[j] = temp

이 부분은 다음 요소 data[j]에 이전에 저장했던 data[i]의 값을 저장합니다.

정답

1
3, 6, 7, 9, 10
This post is licensed under CC BY 4.0 by the author.