알고리즘 문제 간단 정리 04
알고리즘 04
알고리즘 간단 정리 네번째 글입니다.
1. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
function solution(numbers) {
var answer = [];
for(let a = 0; a < numbers.length-1; a++) {
for(let b = a+1; b < numbers.length; b++) {
const sum = numbers[a] + numbers[b];
if(answer.indexOf(sum) < 0) {
answer.push(sum);
}
}
}
answer.sort((a, b) => a - b);
return answer;
}
}
이 함수는 주어진 배열에서 서로 다른 인덱스에 있는 두 수를 더한 결과를 중복되지 않게 반환하는 것입니다.
- 먼저, 빈 배열
answer
를 선언합니다. - 이중 반복문을 사용하여 배열
numbers
의 각 요소들을 서로 다른 조합으로 더합니다.- 외부 반복문은 배열의 첫 번째 요소부터 마지막에서 두 번째 요소까지 순회합니다.
- 내부 반복문은 외부 반복문의 다음 요소부터 마지막 요소까지 순회합니다.
- 두 수를 더한 결과를
sum
변수에 저장합니다. answer
배열에 중복되지 않는 합을 추가합니다. 중복을 체크하기 위해indexOf()
메서드를 사용합니다.- 만약
sum
이answer
배열에 없다면(indexOf()
의 결과가 음수라면)answer
배열에 추가합니다.
- 만약
answer
배열을 오름차순으로 정렬합니다.- 정렬된
answer
배열을 반환합니다.
이 함수는 배열의 각 요소들을 조합하여 더한 결과를 중복되지 않게 반환하는 것으로, 중복된 합을 제외하고 모든 합을 반환합니다.
2. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
{
function solution(arr) {
arr.splice(arr.findIndex((a) => a == Math.min(...arr)), 1);
return arr.length < 0 ? arr = [-1] : arr;
}
}
이 함수는 배열 arr
에서 가장 작은 값을 제거하는 것입니다.
Math.min(...arr)
을 사용하여 배열arr
에서 가장 작은 값을 찾습니다.findIndex()
메서드를 사용하여 가장 작은 값의 인덱스를 찾습니다.splice()
메서드를 사용하여 해당 인덱스의 요소를 배열에서 제거합니다.splice()
메서드는 첫 번째 매개변수로부터 시작하여 두 번째 매개변수만큼의 요소를 제거합니다. 이 경우에는 인덱스를 지정하여 해당 요소를 제거합니다.
- 만약 배열
arr
의 길이가 0보다 작다면(즉, 배열이 비어있다면),-1
을 요소로 갖는 배열을 반환합니다. 그렇지 않으면 배열arr
을 그대로 반환합니다.
이 함수는 주어진 배열에서 가장 작은 값을 제거한 배열을 반환하며, 만약 배열이 비어있다면 -1
을 요소로 갖는 배열을 반환합니다.
3. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
{
function solution(phone_number){
return "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
}
// 정규식 표현
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, "*");
}
}
이 함수는 배열 arr
에서 가장 작은 값을 제거하는 것입니다.
Math.min(...arr)
을 사용하여 배열arr
에서 가장 작은 값을 찾습니다.findIndex()
메서드를 사용하여 가장 작은 값의 인덱스를 찾습니다.splice()
메서드를 사용하여 해당 인덱스의 요소를 배열에서 제거합니다.splice()
메서드는 첫 번째 매개변수로부터 시작하여 두 번째 매개변수만큼의 요소를 제거합니다. 이 경우에는 인덱스를 지정하여 해당 요소를 제거합니다.
- 만약 배열
arr
의 길이가 0보다 작다면(즉, 배열이 비어있다면),-1
을 요소로 갖는 배열을 반환합니다. 그렇지 않으면 배열arr
을 그대로 반환합니다.
이 함수는 주어진 배열에서 가장 작은 값을 제거한 배열을 반환하며, 만약 배열이 비어있다면 -1
을 요소로 갖는 배열을 반환합니다.
4. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
{
function solution(arr) {
return arr.reduce((acc, cur) => acc + cur) / arr.length;
}
}
이 함수는 주어진 배열 arr
의 평균값을 계산하는 것입니다.
reduce()
메서드를 사용하여 배열의 모든 요소를 더합니다.acc
는 누적값을 의미하며, 초기값은 생략되었으므로 배열의 첫 번째 요소부터 시작합니다.cur
은 현재 요소를 의미합니다.
- 더한 값에 배열의 길이(
arr.length
)를 나누어 평균값을 계산합니다. - 평균값을 반환합니다.
이 함수는 주어진 배열의 모든 요소를 더한 후 배열의 길이로 나눈 평균값을 반환합니다.
5. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
{
function solution(n) {
return String(n).split('').map((x) => Number(x)).reverse();
}
}
이 함수는 주어진 숫자 n
을 문자열로 변환한 후 각 자리의 숫자를 배열로 만들고, 이 배열을 뒤집어 반환하는 것입니다.
String(n)
을 사용하여 숫자n
을 문자열로 변환합니다.split('')
메서드를 사용하여 문자열을 각 자리의 숫자로 나눕니다. 이렇게 하면 각 자리의 숫자가 요소로 포함된 배열이 생성됩니다.map((x) => Number(x))
를 사용하여 각 요소를 숫자로 변환합니다. 이는 문자열로 나누어진 각 자리의 숫자가 여전히 문자열 형태이기 때문에 숫자로 변환해야 합니다.reverse()
메서드를 사용하여 배열을 뒤집습니다.- 뒤집은 배열을 반환합니다.
이 함수는 주어진 숫자를 각 자리의 숫자가 뒤집힌 순서로 배열로 반환합니다.
6. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
6
7
8
9
10
11
12
{
function solution(s) {
let arr = s.split(' ');
let result = [];for(let i = 0; i < arr.length; i++) {
let words = arr[i].split('').map((word, idx) => {
return (idx % 2) ? word : word.toUpperCase();
}).join('');
result.push(words);
}
return result.join(' ');
}
}
이 함수는 주어진 문자열 s
를 단어 단위로 나눈 후, 각 단어의 짝수 인덱스에 있는 문자를 대문자로 변환하고 홀수 인덱스에 있는 문자를 소문자로 변환하는 것입니다.
split(' ')
메서드를 사용하여 주어진 문자열s
를 공백을 기준으로 나눕니다. 이렇게 하면 각 단어가 요소로 포함된 배열arr
이 생성됩니다.for
반복문을 사용하여 배열arr
의 각 요소에 대해 다음 작업을 수행합니다.split('')
메서드를 사용하여 현재 단어를 각 문자로 분할합니다.map()
메서드를 사용하여 각 문자에 대해 다음 작업을 수행합니다.- 현재 문자의 인덱스가 짝수인 경우(
idx % 2 === 0
), 해당 문자를 대문자로 변환합니다. - 현재 문자의 인덱스가 홀수인 경우(
idx % 2 === 1
), 해당 문자를 소문자로 변환합니다.
- 현재 문자의 인덱스가 짝수인 경우(
join('')
메서드를 사용하여 변환된 문자들을 다시 하나의 단어로 합칩니다.- 변환된 단어를
result
배열에 추가합니다.
join(' ')
메서드를 사용하여result
배열의 요소들을 공백으로 연결하여 하나의 문자열로 반환합니다.
이 함수는 주어진 문자열에서 각 단어의 짝수 인덱스에 있는 문자를 대문자로 변환하고 홀수 인덱스에 있는 문자를 소문자로 변환한 문자열을 반환합니다.
7. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
{
function solution(num) {
return (num % 2) ? "Odd" : "Even";
}
}
이 함수는 주어진 숫자 num
이 홀수인지 짝수인지를 판별하여 “Odd” 또는 “Even”을 반환하는 것입니다.
- 주어진 숫자
num
을 2로 나눈 나머지를 계산합니다. 이를 통해 숫자가 홀수인지 짝수인지를 판별합니다.- 만약 나머지가 0이라면, 주어진 숫자는 짝수입니다. 이때는
"Even"
을 반환합니다. - 나머지가 0이 아니라면, 주어진 숫자는 홀수입니다. 이때는
"Odd"
를 반환합니다.
- 만약 나머지가 0이라면, 주어진 숫자는 짝수입니다. 이때는
이 함수는 주어진 숫자가 홀수인지 짝수인지를 판별하여 이에 해당하는 문자열을 반환합니다.
8. 다음을 보고 결괏값을 작성하시오!
1
2
3
4
5
{
function solution(n) {
return (n+'').split('').reduce((acc, cur) => acc + Number(cur), 0);
}
}
이 함수는 주어진 숫자 n
의 각 자리 숫자를 더하는 것입니다.
(n+'')
를 사용하여 주어진 숫자n
을 문자열로 변환합니다.split('')
메서드를 사용하여 문자열을 각 자리의 숫자로 나눕니다. 이렇게 하면 각 자리의 숫자가 요소로 포함된 배열이 생성됩니다.reduce()
메서드를 사용하여 배열의 각 요소를 순회하면서 누적값을 계산합니다.- 초기값은 0으로 설정합니다.
- 각 요소를 숫자로 변환하여 누적값에 더합니다.
- 누적값을 반환합니다.
이 함수는 주어진 숫자의 각 자리 숫자를 모두 더한 값을 반환합니다.
이렇게 오늘도 8개정도 정리를 해봤습니다. 오늘도 필자의 부족한 글 읽어주셔서 감사합니다.