Leeyanggoo
[오답노트] 눈을 뜨십시오 휴-먼 본문
01. 다음의 결괏값을 작성하시오.
{
let i = 0;
let sum = 0;
while(i < 10){
i = i+1;
if( i % 4 == 0) sum -= i;
if( i % 4 == 1) sum += i;
if( i % 4 == 2) sum *= i
}
console.log(sum)
}
i = 1, sum = 0 + 1 = 1 (i % 4 == 1)
i = 2, sum = 1 * 2 = 2 (i % 4 == 2)
i = 3, sum = 2 (i % 4 == 3, 조건에 해당하지 않음)
i = 4, sum = 2 - 4 = -2 (i % 4 == 0)
i = 5, sum = -2 + 5 = 3 (i % 4 == 1)
i = 6, sum = 3 * 6 = 18 (i % 4 == 2)
i = 7, sum = 18 (i % 4 == 3, 조건에 해당하지 않음)
i = 8, sum = 18 - 8 = 10 (i % 4 == 0)
i = 9, sum = 10 + 9 = 19 (i % 4 == 1)
i = 10, sum = 19 * 10 = 190 (i % 4 == 2)
출력 : 190
네 눈에는 sum이 0으로 선언된 게 안 보이느냐?
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);
}
코드의 연산 과정은 다음과 같습니다:
- 초기 배열: [3, 4, 5, 7, 8]
- i = 0일 때:
- j = 1: num[0] < num[1] → 3 < 4 → 교환 → [4, 3, 5, 7, 8]
- j = 2: num[0] < num[2] → 4 < 5 → 교환 → [5, 3, 4, 7, 8]
- j = 3: num[0] < num[3] → 5 < 7 → 교환 → [7, 3, 4, 5, 8]
- j = 4: num[0] < num[4] → 7 < 8 → 교환 → [8, 3, 4, 5, 7]
- i = 1일 때:
- j = 2: num[1] < num[2] → 3 < 4 → 교환 → [8, 4, 3, 5, 7]
- j = 3: num[1] < num[3] → 4 < 5 → 교환 → [8, 5, 3, 4, 7]
- j = 4: num[1] < num[4] → 5 < 7 → 교환 → [8, 7, 3, 4, 5]
- i = 2일 때:
- j = 3: num[2] < num[3] → 3 < 4 → 교환 → [8, 7, 4, 3, 5]
- j = 4: num[2] < num[4] → 4 < 5 → 교환 → [8, 7, 5, 3, 4]
- i = 3일 때:
- j = 4: num[3] < num[4] → 3 < 4 → 교환 → [8, 7, 5, 4, 3]
모든 반복이 완료되면 정렬된 배열은 [8, 7, 5, 4, 3]이 됩니다. 이 배열이 출력됩니다.
for문 안에 for문이 있으면 뭐다?
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));
}
이 코드의 연산 과정은 다음과 같습니다:
- 배열 num을 선언하고 초기값으로 [1, 2, 3, 4, 5]를 할당합니다.
- 변수 sum을 선언하고 초기값으로 1을 할당합니다.
- 함수 func를 정의합니다. 이 함수는 주어진 배열에 대해 다음 작업을 수행합니다:
- 배열의 모든 원소를 sum에 더합니다.
- 배열의 짝수 원소를 sum에서 뺍니다.
- 최종적으로 계산된 sum을 반환합니다.
- 함수 func에 배열 num을 인자로 전달하고, 결과를 출력합니다.
다음은 연산 과정의 자세한 설명입니다:
- 함수 func에 배열 [1, 2, 3, 4, 5]가 전달됩니다.
- 첫 번째 for 반복문에서 배열의 모든 원소를 sum에 더합니다:
- sum = 1 + 1 = 2
- sum = 2 + 2 = 4
- sum = 4 + 3 = 7
- sum = 7 + 4 = 11
- sum = 11 + 5 = 16
- 두 번째 for 반복문에서 배열의 짝수 원소를 sum에서 뺍니다:
- sum = 16 - 2 = 14 (2는 짝수)
- sum = 14 - 4 = 10 (4는 짝수)
- 함수 func는 최종 계산된 sum인 10을 반환합니다.
- 출력 값은 10입니다.
arr 뒤에 붙는 대괄호는 장식이 아니다.
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)
}
이 코드의 연산 과정은 다음과 같습니다:
- 배열 num을 선언하고 초기값으로 문자열 형태의 숫자들을 할당합니다: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
- 변수 sum을 선언하고 초기값으로 100을 할당합니다.
- 첫 번째 for 반복문에서 배열 num의 각 원소를 숫자형으로 변경하고 1씩 더해줍니다:
- num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 두 번째 for 반복문에서 배열 num의 원소 중 인덱스가 3으로 나누어 떨어지지 않고 1이 남는 원소를 sum에서 뺍니다:
- sum = 100 - 2 (i = 1) = 98
- sum = 98 - 5 (i = 4) = 93
- sum = 93 - 8 (i = 7) = 85
- 출력 값은 85입니다.
num뒤에 붙는 대괄호는 장식이 아니다.
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]);
}
}
}
이 코드의 연산 과정은 다음과 같습니다:
- 두 개의 배열 arr와 temp를 선언하고 초기값을 할당합니다:
- arr = [1, 2, 3, 4, 5]
- temp = [1, 2, 4, 6, 8]
- 변수 idx를 선언하고 초기값으로 0을 할당합니다.
- 변수 flag를 선언하고 초기값으로 true를 할당합니다.
- for 반복문에서 배열 arr의 원소와 temp의 원소를 비교합니다:
- i = 0: arr[0] == temp[0] → 1 == 1 → flag = true, 출력되지 않음
- i = 1: arr[1] != temp[1] → 2 != 2 → flag = false, temp[0] = 2, 출력: 2
- i = 2: arr[2] != temp[2] → 3 != 4 → flag = false, temp[1] = 3, 출력: 3
- i = 3: arr[3] == temp[3] → 4 == 4 → flag = true, 출력되지 않음
- i = 4: arr[4] != temp[4] → 5 != 8 → flag = false, temp[2] = 5, 출력: 5
코드 실행 도중 출력되는 값들은 2, 3, 5입니다.
눈을 뜨고 console.log의 위치를 보도록 해라.
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 );
}
&는 AND 연산자로 두 값이 1인 경우 1을 반환합니다...
그럼 반대는 뭐다?
15. 다음의 결괏값을 작성하시오.
{
let result = 0;
for(let i=1; i<999; i++){
if(i%3==0 && i%2 !=0){
result = i;
}
}
console.log(result);
}
맞췄던 문제를 틀리면... 에휴
이 코드의 연산 과정은 다음과 같습니다:
- 변수 result를 선언하고 초기값으로 0을 할당합니다.
- 1부터 998까지 for 반복문을 수행하며, 반복 변수 i가 3의 배수이고 2의 배수가 아닌 경우 result에 값을 할당합니다. (홀수인 3의 배수)
- 반복문이 끝나면 최종적으로 result에 할당된 값을 출력합니다.
코드 실행 결과 출력되는 값은 999보다 작은 가장 큰 홀수인 3의 배수인 999 - 6 = 993입니다.