오답노트
매주 금요일에 시험본 문제들을 하나씩, 그리고 한줄씩 정리합니다! 오답노트라고 적혀있긴 하지만 맞췄던 문제들도 복습한다는 생각으로 같이 정리해서 주말동안에 나눠서 올릴 예정입니다.
열한번째 문제의 값 구하기
아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.
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 % 2 | 3 | 1 |
3 % 2 | 1 | 1 |
1 % 2 | 1 | 0 |
따라서 7의 2진수 값은 0(나머지값), 111(나눈 몫)입니다.
b의 2진수 계산하기
계산식 | 나눈 몫 | 나머지 값 |
---|
4 % 2 | 2 | 0 |
2 % 2 | 1 | 0 |
1 % 2 | 1 | 0 |
따라서 4의 2진수 값은 0(나머지값), 100(나눈 몫)입니다.
OR
따라서 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의 값을 출력합니다.
정답
열네번째 문제의 값 구하기
아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.
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 | 계산식 | 나머지 값 |
---|
25 | 25 % 10 | 5 |
23 | 23 % 10 | 3 |
11 | 11 % 10 | 1 |
47 | 47 % 10 | 7 |
53 | 53 % 10 | 3 |
17 | 17 % 10 | 7 |
33 | 33 % 10 | 33 |
40 | 40 % 10 | 0 |
열다섯번째 문제의 값 구하기
아래의 문제에서는 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 % 2 | 3 | 1 |
3 % 2 | 1 | 1 |
1 % 2 | 1 | 0 |
따라서 7의 2진수 값은 0(나머지값), 111(나눈 몫)입니다.
b의 2진수 계산하기
계산식 | 나눈 몫 | 나머지 값 |
---|
4 % 2 | 2 | 0 |
2 % 2 | 1 | 0 |
1 % 2 | 1 | 0 |
따라서 4의 2진수 값은 0(나머지값), 100(나눈 몫)입니다.
AND
따라서 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이 됩니다.
정답
열일곱번째 문제의 값 구하기
아래의 문제에서는 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의 초기값
조건식 반복문
- 조건식: 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 %= 9 | 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일때 콘솔로그에 출력됩니다.
정답
Element | i(Index) | 더하기 | 나머지 값 |
---|
1 | 0 | 0 + 2 = 2 | 2 % 2 = 0 (true) |
5 | 1 | 1 + 2 = 3 | 3 % 2 = 1 (false) |
1 | 2 | 2 + 2 = 4 | 4 % 2 = 0 (true) |
2 | 3 | 3 + 2 = 5 | 5 % 2 = 1 (false) |
7 | 4 | 4 + 2 = 6 | 6 % 2 = 0 (true) |
5 | 5 | 5 + 2 = 7 | 7 % 2 = 1 (false) |
스무번째 문제의 값 구하기
아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.
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부터 시작하여 배열의 끝까지 비교하기 위함입니다.
요소 비교
이 부분은 data[i]와 data[j]의 요소를 비교합니다. 만약 data[i]가 더 크다면 두 요소를 교환하게 됩니다.
temp의 값 변경
이 부분은 data[i]의 값이 temp에 저장합니다.
data[i] 값 변경
이 부분은 현재 요소 data[i]에 data[j]의 값을 저장합니다.
data[i] 값 변경
이 부분은 다음 요소 data[j]에 이전에 저장했던 data[i]의 값을 저장합니다.
정답