알고리즘 문제 간단 정리 01
알고리즘 01
알고리즘 공부를 시작하면서 간단하게 10개씩 정리해서 올려보려고 합니다.
01. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
{
function func(){
let a = [];
for(i=1; i<=5; i++){
a += [i];
}
console.log(a);
}
func();
}
주어진 코드에서 함수 func()
는 배열 a
에 1부터 5까지의 숫자를 추가하려는 것 같습니다. 그러나 a += [i]
의 형태는 배열을 문자열로 변환하여 추가하는 것이므로 예상과 다른 결과를 초래할 것입니다. 따라서 코드를 실행하면 다음과 같은 결과가 나올 것입니다:
1
"12345"
따라서 결괏값은 문자열 "12345"
가 될 것입니다.
02. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
{
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);
}
주어진 코드는 배열 arr
의 요소들을 문자열로 결합하는 것을 보여줍니다. 각각의 join()
메서드 호출은 배열의 요소들을 결합하는 방식을 다르게 설정하고 있습니다.
text1
은 배열의 요소들을 “*” 문자로 구분하여 결합합니다.text3
은 배열의 요소들을 구분 없이 연이어서 결합합니다.text4
는 배열의 요소들을 공백으로 구분하여 결합합니다.
따라서 각각의 결과는 다음과 같을 것입니다:
1
2
3
100*200*300*400*500
100200300400500
100 200 300 400 500
03. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
{
let a, b = 10;
for(let i=0; i<5; i++){
a = i;
b -= a;
}
console.log(a, b)
}
- 초기에
a
와b
를 선언하지만,b
에는 초기값을 명시했고a
는 그렇지 않았습니다. 이 경우a
는undefined
가 됩니다. - 반복문에서는
a
를i
로 설정하고,b
에서a
를 빼는 연산을 수행합니다. - 반복문이 0부터 4까지 실행되므로
a
에는 0부터 4까지의 값이 들어가고,b
는 초기값인 10에서a
가 빠져나가는 값이 누적됩니다.
결과적으로 마지막 반복에서 b
에 누적된 값이 출력될 것입니다. 따라서 결과는 (4, 0)
이 됩니다.
04. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
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();
}
주어진 함수 func()
는 다음과 같은 동작을 수행합니다:
i
에 20을 할당합니다.j
에 20을 할당합니다.k
에 30을 할당합니다.i
를j
로 나누고 그 값을 다시i
에 할당합니다. 즉,i
는 1이 됩니다.j
에서i
를 뺀 값을j
에 할당합니다. 즉,j
는 19가 됩니다.k
를j
로 나눈 나머지 값을k
에 할당합니다. 이때, 나누기 연산에서 나머지는 11이 되므로k
는 11이 됩니다.
따라서 console.log()
에 의해 출력되는 값은 다음과 같을 것입니다:
1
2
3
1
19
11
05. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
{
let k = 1;
let temp;
for(let i=0; i<=3; i++){
temp = k;
k++;
console.log(temp + "번");
}
}
주어진 코드는 반복문을 사용하여 변수 k
를 증가시키면서 출력하는 것으로 보입니다.
- 초기에 변수
k
에 1을 할당합니다. - 반복문을 사용하여
i
가 0부터 3까지 증가하면서 반복합니다. - 각 반복에서
temp
에 현재k
의 값을 할당하고,k
를 1 증가시킵니다. temp
와 “번” 문자열을 결합하여 출력합니다.
따라서 출력 결과는 다음과 같을 것입니다:
1
2
3
4
1번
2번
3번
4번
06. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
{
let num1 = 3;
let num2 = 7;
if(++num1 > 5 || num2++ < 1){
console.log(num1);
}
console.log(num2)
}
주어진 코드는 조건문을 사용하여 변수 num1
과 num2
를 조작하고 출력하는 것으로 보입니다.
num1
에 3을 할당합니다.num2
에 7을 할당합니다.- 조건문을 평가합니다.
++num1
은 선 증가 연산자를 사용하여num1
을 1 증가시키고, 그 값을 평가합니다. 따라서num1
은 4가 됩니다. 또한num2++
은 후 증가 연산자를 사용하여num2
의 현재 값을 평가한 후에 1을 증가시킵니다. 하지만 이 부분은 조건문에서 사용되지 않으므로 그대로 7의 값을 가집니다. - 첫 번째 조건인
++num1 > 5
는 참이므로 다음 문장이 실행됩니다.console.log(num1)
이 실행되어num1
의 값인 4가 출력됩니다. - 두 번째
console.log(num2)
는 조건문과 관계없이 실행됩니다.num2
의 값은 후 증가 연산자 때문에 이미 1이 증가되었으므로 8이 출력됩니다.
따라서 출력 결과는 다음과 같을 것입니다:
1
2
4
8
07. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
{
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
의 요소를 반복하면서 특정 조건을 만족하는 요소만 출력하는 것으로 보입니다.
- 반복문을 사용하여
i
가 0부터 5까지 증가하면서 반복합니다. - 각 반복에서
(i+2) % 2
를 계산합니다.(i+2)
는 2부터 7까지의 값이 되므로 이를 2로 나누면 홀수 인덱스(1, 3, 5, 7, 9)는 1이 되고, 짝수 인덱스(2, 4, 6, 8, 10)는 0이 됩니다. - 따라서 짝수 인덱스에 해당하는 요소만 조건문을 통과하여 출력됩니다.
주어진 배열에서 짝수 인덱스에 해당하는 요소는 0부터 시작하여 두 칸씩 이동하면 됩니다. 따라서 출력 결과는 다음과 같을 것입니다:
1
2
3
5
2
5
08. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
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
의 각 요소를 반복하면서 홀수인 경우에는 해당 숫자를 출력하고, 짝수인 경우에는 “*“를 출력하는 것으로 보입니다.
- 반복문을 사용하여
i
가 0부터 9까지 증가하면서 반복합니다. - 각 반복에서
num[i] % 2
를 계산하여 해당 요소가 홀수인지 짝수인지 판별합니다. - 홀수인 경우
case 1
이 실행되어 해당 숫자를 출력합니다. - 짝수인 경우
default
블록이 실행되어 “*“를 출력합니다.
따라서 출력 결과는 다음과 같을 것입니다:
1
2
3
4
5
6
7
8
9
10
*
1
*
3
*
5
*
7
*
9
09. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
{
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);
}
주어진 코드는 0부터 7까지의 숫자 중 홀수인 숫자의 개수와 그 합의 절반을 출력하는 것으로 보입니다.
cnt
와sum
변수를 각각 0으로 초기화합니다.- 반복문을 사용하여
i
가 0부터 7까지 증가하면서 반복합니다. - 각 반복에서
i
가 홀수인지 확인합니다. 홀수인 경우i%2
가 1이 되므로 조건문이 참이 됩니다. - 홀수인 경우에는
cnt
를 1 증가시키고,sum
에 현재 홀수인i
를 더합니다. - 반복이 끝나면 홀수의 개수인
cnt
와 홀수의 합인sum
의 절반을 출력합니다.
따라서 출력 결과는 다음과 같을 것입니다:
1
4, 8
홀수의 개수는 4이고, 홀수의 합은 16이므로 절반은 8이 됩니다.
- 다음을 보고 결괏값을 작성하시오!
1 2 3 4 5 6 7 8 9 10
{ 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를 사용하여 피보나치 수열의 여섯 번째 항을 계산하고 다섯 번째 항의 값과 합하여 출력하는 것입니다. 코드를 단계별로 설명하겠습니다:
a
와b
를 각각 1로 초기화합니다. 이 값들은 피보나치 수열의 첫 번째와 두 번째 항을 나타냅니다.- 반복문을 통해 피보나치 수열의 여섯 번째 항까지 계산합니다.
i
가 0부터 시작하여 6보다 작을 때까지 반복됩니다. - 각 반복에서는 새로운 항을 계산하고
num
에 할당합니다. 새로운 항은 이전 두 항의 합으로 계산됩니다. - 이전의
b
값을a
에 할당하고, 새로 계산된num
값을b
에 할당하여 다음 항을 준비합니다. - 반복문이 종료된 후에는 여섯 번째 항의 값과 다섯 번째 항의 값의 합이
num
변수에 저장되어 있습니다. - 마지막으로
console.log()
를 사용하여 여섯 번째 항과 다섯 번째 합의 값을 출력합니다.
따라서 이 코드는 결과값 21을 출력합니다.
이렇게 오늘 알고리즘 10문제를 간단정리 해보았습니다
오늘도 필자의 부족한 글 읽어주셔서 감사합니다.