오답노트
매주 금요일에 시험본 문제들을 하나씩, 그리고 한줄씩 정리합니다! 오답노트라고 적혀있긴 하지만 맞췄던 문제들도 복습한다는 생각으로 같이 정리해서 주말동안에 나눠서 올릴 예정입니다.
첫번째 문제의 값 구하기
아래의 문제에서는 a의 값을 구하는 문제입니다.
1
2
3
4
5
6
7
8
9
| function func() {
let a = [];
for (i = 1; i <= 5; i++) {
a += [i];
}
console.log(a);
}
func();
|
문제 풀이
let a =[] 와 for
- a의 변수를 빈 배열에 선언하며 이때 a의 값은 for문의 결과값이 넣어집니다. for문에서는 아래의 조건식이 만족할때까지 반복하게 되며 값을 a 배열에 추가합니다.
조건식 반복문
- i = 1: i의 값은 1부터 시작합니다.
- i <= 5: i의 값이 5보다 작거나 같을 때까지 조건문을 실행합니다.
- i++: 조건이 충족될떄까지 조건문이 끝날 때마다 i의 값이 1씩 증가합니다.
정답
- 조건문이 1부터 5까지 실행되었기 때문에, 최종 a 배열의 값은 [1, 2, 3, 4, 5]입니다.
두번째 문제의 값 구하기
아래의 문제에서는 text1, text3, text4의 출력값을 구해야합니다.
1
2
3
4
5
6
7
8
9
| const arr = [100, 200, 300, 400, 500];
const text1 = arr.join("*");
const text3 = arr.join("");
const text4 = arr.join(" ");
console.log(text1);
console.log(text3);
console.log(text4);
|
문제 풀이
join
- join은 배열 사이에 값을 추가할때 사용됩니다. 위에서는 text1, text3, text4 각각에 값을 추가하기 때문에 어떠한 값이 추가되는지 잘 살펴봐야 합니다.
값 추가하기
- text1: arr의 배열 안에 __*__이 추가됩니다.
- text3: “” 빈 문자열이 추가되어 배열이 쉼표와 공백 없이 출력됩니다.
- text4: 빈 문자열 안에 공백이 있어 출력되었을때 공백이 추가되어 나옵니다.
정답
1
2
3
| const text1 = 100*200*300*400*500
const text3 = 100200300400500
const text4 = 100 200 300 400 500
|
세번째 문제의 값 구하기
아래의 문제에서는 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
|
네번째 문제의 값 구하기
아래의 문제에서는 a와 b의 출력값을 구해야합니다.
1
2
3
4
5
6
7
8
9
10
11
| 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();
|
문제 풀이
i, j, k의 초깃값
- i, j는 20, k는 30이 선언되었습니다.
계산식
- i /= j: i와 j를 나눈 값을 i에게 저장합니다. 따라서 i의 값은 1이 됩니다.
- j -= i: 간단한 뺄쌤이며 계산이 끝난 값이 j에게 저장됩니다. 따라서 j의 값은 19가 됩니다.
- k %= j: k와 j를 나눈값의 나머지를 k에게 저장합니다. 따라서 k의 값은 11이 됩니다.
정답
1
2
3
| i = 1
j = 19
k = 11
|
다섯번째 문제의 값 구하기
아래의 문제에서는 a와 b의 출력값을 구해야합니다.
1
2
3
4
5
6
7
| let k = 1;
let temp;
for (let i = 0; i <= 3; i++) {
temp = k;
k++;
console.log(temp + "번");
}
|
문제 풀이
k와 temp의 초기값
- k는 1로 선언되어있으며 temp는 아직 선언되지 않았습니다.
계산식
- i = 0: i는 0부터 시작되며 3보다 작거나 값이 같을때 조건문이 끝납니다. 또한 조건이 충족되어 더이상 실행이 되지 않을때 까지 조건문이 끝날 때마다 i의 값이 1씩 증가합니다.
- temp = k: k의 값이 temp에 저장 됩니다.
- k++: 조건문이 끝날 때마다 k의 값이 1씩 증가합니다. 초깃값이 1로 시작하기에 4번 반복될경우 1, 2, 3, 4가 됩니다.
- temp + “번”: temp의 값에 문자열 “번”이 붙습니다.
정답
여섯번째 문제의 값 구하기
아래의 문제에서는 num2의 출력값을 구해야합니다.
1
2
3
4
5
6
| let num1 = 3;
let num2 = 7;
if (++num1 > 5 || num2++ < 1) {
console.log(num1);
}
console.log(num2)
|
문제 풀이
num1, num2의 초기값
- num1은 3이 선언되었고 num2는 7이 선언되었습니다.
계산식
- ++의 위치: ++가 앞에 있는 num1의 경우에는 조건식의 처음부터 값이 증가하고 ++가 뒤에 있는 num2는 조건식이 한번 끝난후에 값이 증가됩니다.
- 비교문 num1: num1의 값이 5보다 커야하는데 num1의 값은 4이기 떄문에 충족되지 못합니다.
- 비교문 num2: num2의 값이 1보다 작아야하는데 7이기 때문에 충족되지 못합니다.
__ | | (or)__: num1과 num2중 하나라도 조건이 충족될경우 {}안의 콘솔로그가 작동되는데 이번의 경우에는 두개다 충족되지 못해 밖에 있는 num2의 값이 출력됩니다.
|
정답
일곱번째 문제의 값 구하기
아래의 문제에서는 num[i]의 출력값을 구해야합니다.
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부터 시작하며 한번의 조건문이 끝날떄마다 1씩 증가해 6과 값이 같아질때 반복문이 종료됩니다.
- (i + 2) % 2 == 0: i의 값에 2를 더한 값을 2랑 나눌때 0이 되어야만 안에 들어가 콘솔로그에 저장됩니다.
정답
i(index) | 값(Element) | 계산식 |
---|
0 | 1 | 0 + 2 = 2 🔜 2 % 2 = 0 (true) |
1 | 5 | 1 + 2 = 3 🔜 3 % 2 = 1 (false) |
2 | 1 | 2 + 2 = 4 🔜 4 % 2 = 0 (true) |
3 | 2 | 3 + 2 = 5 🔜 5 % 2 = 1 (false) |
4 | 7 | 4 + 2 = 6 🔜 6 % 2 = 0 (true) |
5 | 5 | 5 + 2 = 7 🔜 7 % 2 = 1 (false) |
여덟번째 문제의 값 구하기
아래의 문제에서는 num2의 출력값을 구해야합니다.
1
2
3
4
5
6
7
8
9
10
11
| 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("가");
}
}
|
문제 풀이
num의 배열값
- num의 배열안에는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9가 존재합니다.
계산식
- i: i는 인덱스의 값입니다. 0부터 시작하며 한번의 조건문이 끝날떄마다 1씩 증가해 9과 값이 같아질때 반복문이 종료됩니다.
- switch: 이 switch 문은 배열 요소 num[i]를 2로 나눈 나머지 값을 확인합니다. 나머지가 1인 경우(홀수)에는 case 1이 실행되고, 그 외의 경우(짝수)에는 default가 실행됩니다.
- case 1: num[i]와 2를 나눈 나머지 값이 1일 경우 실행합니다.
- default: case가 실행되지 않을경우 문자열이 실행됩니다.
정답
값(Element) | 계산식 |
---|
0 | 0 % 2 = 0 (default) |
1 | 1 % 2 = 1 (case) |
2 | 2 % 2 = 0 (default) |
3 | 3 % 2 = 1 (case) |
4 | 4 % 2 = 0 (default) |
5 | 5 % 2 = 1 (case) |
6 | 6 % 2 = 0 (default) |
7 | 7 % 2 = 1 (case) |
8 | 8 % 2 = 0 (default) |
9 | 9 % 2 = 1 (case) |
아홉번째 문제의 값 구하기
아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.
1
2
3
4
5
6
7
8
9
| 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);
|
문제 풀이
cnt, sum 의 초깃값
계산식
- i: i는 0부터 시작하며 7과 값이 같아질때까지 반복합니다. 조건문이 한번 끝날때마다 i의 값이 1씩 증가합니다.
- if: i의 값에 2를 나눴을떄 나머지값이 1일경우 실행됩니다.
- cnt++: if문이 실행되어 안에 들어올때마다 값이 1씩 늘어 횟수를 카운트 합니다.
- sum += i:들어온 i값을 sum에 값을 더해 저장됩니다.
- cnt + “, “ + sum / 2: cnt에 문자열 , 를 추가한뒤에 sum의 값에 2를 나눈 값을 출력합니다.
정답
i | 계산식 | cnt | sum |
---|
0 | 0 % 2 = 0 (false) | 0 | 0 |
1 | 1 % 2 = 1 (true) | 1 | 1 |
2 | 2 % 2 = 0 (false) | 1 | 1 |
3 | 3 % 2 = 1 (true) | 2 | 1 + 3 = 4 |
4 | 4 % 2 = 0 (false) | 2 | 4 |
5 | 5 % 2 = 1 (true) | 3 | 4 + 5 = 9 |
6 | 6 % 2 = 0 (false) | 3 | 9 |
7 | 7 % 2 = 1 (true) | 4 | 9 + 7 = 16 |
횟수 | sum |
---|
1 | 16 / 2 = 14 |
2 | 14 / 2 = 12 |
3 | 12 / 2 = 10 |
4 | 10 / 2 = 8 |
5 | 8 / 2 = 6 |
6 | 6 / 2 = 4 |
7 | 4 / 2 = 2 |
8 | 2 / 2 = 0 |
열번째 문제의 값 구하기
아래의 문제에서는 콘솔로그의 출력값을 구해야합니다.
1
2
3
4
5
6
7
8
| let a = 1, b = 1, num;
for (let i = 0; i < 6; i++) {
num = a + b;
a = b;
b = num;
}
console.log(num)
|
문제 풀이
a, b, num의 초깃값
- a와 b는 1, num의 값은 선언되지 않았습니다.
계산식
- i: i는 0부터 시작하며 6이랑 같아질때 반복문이 종료됩니다. 따라서 반복문은 총 5번 실행됩니다.
- num의 값과 a, b의 값 변경:
- a: a의 값은 1부터 시작해 조건문이 한번 돌때마다 b의 값으로 변경됩니다.
- b:b의 값은 1부터 시작해 조건문이 한번 돌때마다 num의 값으로 변경됩니다.
- num: a와 b를 더해 나온 값으로 변경됩니다.
정답
i | 계산식 | num | a | b |
---|
0 | 1 + 1 = 2 | 2 | 1 | 2 |
1 | 1 + 2 = 3 | 3 | 2 | 3 |
2 | 2 + 3 = 5 | 5 | 3 | 5 |
3 | 3 + 5 = 8 | 8 | 5 | 8 |
4 | 5 + 8 = 13 | 13 | 8 | 13 |
5 | 8 + 13 = 21 | 21 | 13 | 21 |
1
2
3
| num: 21
a: 13
b: 21
|