정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
function solution(arr, intervals) {
let answer = [];
intervals.forEach((el) => {
const newArr = arr.slice(el[0], el[1]+1);
answer = answer.concat(newArr)
})
return answer;
}
NULL
문자열 str이 주어집니다.
문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = input[0];
for (let i = 0 ; i < str.length ; i++) {
console.log(str[i])
}
});
NULL
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
- 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
- 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
- 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
function solution(a, b, c) {
const countUniqueNumber = new Set([a,b,c]).size;
if (countUniqueNumber === 3) {
return a + b + c;
} else if (countUniqueNumber === 2) {
return (a + b + c) * (a**2 + b**2 + c**2);
} else {
return (a + b + c) * (a**2 + b**2 + c**2 ) * (a**3 + b**3 + c**3 )
}
};
재귀 함수를 사용해서 해당 문제를 조금 더 일반화하여 접근할 수 있을 것 같은데....생각이 나지 않는다.
문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다.
function solution(myString) {
return myString.split('x').sort().filter((el) => el);
}
//다른 풀이
const solution=s=>s.match(/[^x]+/g).sort()
정규 표현식은 정말 무궁무진한 것 같다.
아무리 생각해도 split과 sort 그리고 filter를 이용한 풀이법 밖에 머리속에서 생각이 나질 않는데...정규표현식 하나만으로 split과 filter 두마리 토끼를 다 잡았다.
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
function solution(number) {
return number.split('').reduce((a,b) => Number(a)+Number(b)) % 9;
}
NULL
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
function solution(my_string, m, c) {
let answer = "";
for (let i = c-1 ; i < my_string.length ; i += m) {
answer += my_string[i];
}
return answer;
};
NULL
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
function solution(a, d, included) {
let answer = 0;
included.forEach((el, i) => {
if (el) {
answer += (a + d*i)
}
})
return answer;
}
//다른 풀이
function solution(a, d, included) {
return included.reduce((acc, flag, i) => {
return flag ? acc + a + d * i : acc
}, 0)
}
reduce 정말 잘 써보고 싶다...
길이가 같은 두 문자열 str1과 str2가 주어집니다.
두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
function solution(str1, str2) {
let answer = "";
for (let i = 0; i < str1.length ; i++) {
answer += str1[i] + str2[i]
}
return answer;
}
NULL
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
function solution(arr, queries) {
for (let query of queries) {
const [start, end] = query;
for (let i = start; i <= end; i++) {
arr[i]++;
}
}
return arr;
}
NULL
2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.
function solution(board, k) {
let sum = 0;
for (let i = 0; i < board.length; i++) {
for (let j = 0; j < board[0].length; j++) {
if (i + j <= k) {
sum += board[i][j];
}
}
}
return sum;
}
NULL