오늘은 자바스크립트 오답노트를 작성해보겠습니당.
열심히 공부해야겠네요 ㅠ_ㅠ
자바스크립트 오답노트
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
오답노트
변수 i와 sum을 0으로 초기화합니다.
while 루프를 실행합니다. 루프는 i가 10보다 작을 때까지 반복됩니다.
루프의 본문에서 i를 1 증가시킵니다. (즉, i는 1, 2, 3, ..., 9까지 변경됩니다.)
if 문을 사용하여 i를 3으로 나눈 나머지에 따라 sum의 값을 각각 증가, 감소, 또는 곱셈합니다.
만약 i를 3으로 나눈 나머지가 0이면, sum에서 i를 뺍니다.
만약 i를 3으로 나눈 나머지가 1이면, sum에 i를 더합니다.
만약 i를 3으로 나눈 나머지가 2이면, sum에 i를 곱합니다.
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
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
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)
}
🙆♀️정답 : [4, 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
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
오답노트
길이 10인 문자열 배열 num을 선언합니다. 배열의 원소는 0부터 9까지의 문자열입니다.
변수 sum을 100으로 초기화합니다.
반복문을 사용하여 배열 num의 각 원소를 1부터 10까지의 숫자로 바꿉니다.
다시 반복문을 사용하여 배열 num을 순회하면서 인덱스가 1로 나누어 떨어지는 원소를 찾아 sum에서 빼줍니다.
sum을 출력합니다.
즉, 위 코드는 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
오답노트
변수 temp는 초기값 [1,2,4,6,8]을 가지고 있습니다.
반복문에서 flag 변수를 이용하여, arr[i]와 temp[i]가 같은 경우 flag를 true로 설정합니다.
flag가 false인 경우, temp[idx]에 arr[i] 값을 할당하고 idx를 증가시킵니다.
반복문이 끝나면, temp 배열에서 temp[idx-1]까지 출력합니다. idx는 3이므로, 마지막으로 할당된 temp[2] 즉, 2, 4, 6이 출력됩니다.
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]
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
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 );
}
🙆♀️정답 : false true 4 0 1
오답노트
x가 0보다 크지 않은가? 만약 그렇다면 true를 출력하고, 그렇지 않다면 false를 출력합니다. (false)
x가 0보다 크거나 같으면서 4보다 작거나 같은가? 만약 그렇다면 true를 출력하고, 그렇지 않다면 false를 출력합니다. (true)
x를 2진수로 표현한 후, 왼쪽으로 2비트 시프트한 값을 출력합니다. (4)
x와 2를 비트 단위 AND 연산한 결과를 출력합니다. (0)
x와 3을 비트 단위 AND 연산한 결과를 출력합니다. (1)
14. 다음의 결괏값을 작성하시오.
{
let num = 0;
let i = 1;
while(i<=50){
if(i%7 == 0){
num += i;
}
i++;
}
console.log(num)
}
🙆♀️정답 : 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();
}
🙆♀️정답 : 993
오답노트
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
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가 출력됩니다.