문제 세로 길이 2, 가로 길이 n인 2 x n 보드가 있습니다. 2 x 1 크기의 타일을 가지고 이 보드를 채우는 모든 경우의 수를 리턴해야 합니다. 입력 인자 1 : n number 타입의 1 이상의 자연수 출력 number 타입을 리턴해야 합니다. 주의 사항 타일을 가로, 세로 어느 방향으로 놓아도 상관없습니다. (입출력 예시 참고) Advanced 타일링 문제를 해결하는 효율적인 알고리즘(O(N))이 존재합니다. 반드시 직접 문제를 해결하시면서 입력의 크기에 따라 어떻게 달라지는지 혹은 어떻게 반복되는지 관찰하시기 바랍니다. 💬 코드 function tiling(n) { // 보드를 채우는 경우의 수를 저장할 배열을 생성 const memo = [1, 2]; // memo 배열의 크기가 n 이상이..
문제 두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다. 입력 인자 1 : base number 타입을 요소로 갖는 임의의 배열 base.length는 100 이하 인자 2 : sample number 타입을 요소로 갖는 임의의 배열 sample.length는 100 이하 출력 boolean 타입을 리턴해야 합니다. 주의 사항 base, sample 내에 중복되는 요소는 없다고 가정합니다. Advanced 시간 복잡도를 개선하여, Advanced 테스트 케이스(base, sample의 길이가 70,000 이상)를 통과해 보세요. 💬 코드 const isSubsetOf = function (base, sample) { const baseSet =..
문제 정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다. 버블 정렬(bubble sort)은 여러 정렬 알고리즘(삽입 정렬, 퀵 정렬, 병합 정렬, 기수 정렬 등) 중 가장 기본적인 알고리즘입니다. 버블 정렬 알고리즘은 아래와 같습니다. 첫 번째 요소가 두 번째 요소보다 크면, 두 요소의 위치를 바꿉니다. (swap) 두 번째 요소와 세 번째 요소보다 크면, 두 요소의 위치를 바꿉니다. (swap) 1, 2를 마지막까지 반복합니다. (마지막에서 두 번째 요소와 마지막 요소를 비교) 1~3의 과정을 한 번 거치게 되면, 가장 큰 요소가 배열의 마지막으로 밀려납니다. 1~3의 과정을 첫 요소부터 다시 반복합니다. 5를 통해 두 번째로 큰 요소가 배열의 마지막 바로 두 번째로 밀려납니다..
문제 아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 입력 인자 1 : n number 타입의 n (n은 0 이상의 정수) 출력 number 타입을 리턴해야 합니다. 주의 사항 재귀함수를 이용해 구현해야 합니다. 반복문(for, while) 사용은 금지됩니다. 함수 fibonacci가 반드시 재귀함수일 필요는 없습니다. 코드 / 풀이 function fibonacci(n) { let newArr = [0, 1]; const fib = (n) => { if (new..
문제 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다. 입력 인자 1 : arr number 타입을 요소로 갖는 임의의 배열 출력 number 타입을 리턴해야 합니다. 주의 사항 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다. 배열의 요소는 음수와 0을 포함하는 정수입니다. 배열의 길이는 3 이상입니다. 코드 function largestProductOfThree(arr) { // 배열을 오름차순으로 정렬합니다. arr.sort((a, b) => a - b); // 가장 큰 수 세 개의 곱과 가장 작은 수 두 개와 가장 큰 수 한 개의 곱을 비교합니다. const product1 = arr[arr.length - 1] * arr[arr.length ..
문제 문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다. 입력 인자 1 : str string 타입의 알파벳 문자열 출력 string 타입을 리턴해야 합니다. 주의 사항 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. 3개 이상 연속되는 문자만 압축합니다. 두가지의 방법 1. replace(), 정규식을 이용한 풀이 function compressString(str) { if (str.length === 0) return ''; // 빈 문자열인 경우 빈 문자열 반환 // 정규 표현식을 이용하여 연속되는 문자를 찾고, 해당 부분을 압축한 문자열로 치환 return str.replace(/(.)\1{2,}/g, (mat..
문제 암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴해야 합니다. 카이사르 암호(Caesar cipher)는 평문(plaintext)을 암호키 secret개만큼 (오른쪽으로) 평행이동시켜 암호화 합니다. 복호화는 암호화된 문자열을 원래의 평문으로 복원하는 것을 말합니다. 입력 인자 1 : str string 타입의 알파벳 소문자 문자열 인자 2 : secret number 타입의 암호화 키 출력 string 타입을 리턴해야 합니다. 주의 사항 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. 공백은 그대로 두어야 합니다. code / 풀이 function decryptCaesarCipher(str, secret) { // 빈 문자열인 경우 빈 문자열을 반환 if (str.lengt..
문제 문자열을 입력받아 문자열에서 숫자를 모두 찾아 더한 뒤에 해당 값을 (숫자와 공백을 제외한 나머지) 문자열의 길이로 나눈 값을 정수로 반올림하여 리턴해야 합니다. 입력 인자 1 : str string 타입의 문자열 출력 number 타입을 리턴해야 합니다 (0 이상의 정수) 주의 사항 빈 문자열을 입력받은 경우, 0을 리턴해야 합니다. 숫자(digit)는 연속해서 등장하지 않습니다. code / 풀이 function numberSearch(str) { // 정규식을 이용하여 숫자만 체크할 수 있는 수식을 변수에 저장 const regex = /[0-9]/; // str 문자열에 공백을 없애고 다시 join 해줌 str = str.split(' ').join(''); // str 문자열의 길이가 0이..