두 개의 숫자를 인자로 받아 직각삼각형의 빗변(hypotenuse) 길이를 계산하는 JavaScript 함수를 작성해 보겠습니다. 첫 번째 숫자는 삼각형의 밑변(base) 길이를, 두 번째 숫자는 높이(perpendicular) 길이를 나타냅니다.피타고라스의 정리직각삼각형에서 빗변의 길이는 피타고라스의 정리를 이용해 구할 수 있습니다.a² + b² = c²여기서 a는 밑변, b는 높이, c는 빗변입니다. 따라서 밑변과 높이를 각각 제곱한 후 더하고, 그 값의 제곱근을 구하면 빗변의 길이가 됩니다.예시밑변이 8, 높이가 6이라면 결과
문제 개요 소수점 이하 두 자리까지의 정밀도를 가진 부동소수점 숫자를 입력받아, 해당 숫자를 인도 통화 표기 방식의 영어 텍스트로 변환하는 JavaScript 함수를 작성해야 합니다. 인도의 숫자 체계는 서구권과 달리 Lakh(십만), Crore(천만) 같은 고유한 단위를 사용하기 때문에, 단순한 thousand/million 방식의 변환으로는 처리할 수 없습니다. 이 글에서는 인도식 자릿수 체계에 맞춰 숫자를 단어로 바꾸는 함수를 예제와 함께 살펴봅니다. 예시 입력 숫자가 다음과 같다면 − const num = 125
문자열을 인수로 하나만 받아서, 해당 문자열에서 만들 수 있는 모든 가능한 조합을 배열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 Delhi라는 문자열이 입력되면, 각 문자(D, e, l, h, i)를 포함하거나 포함하지 않는 모든 경우의 수를 조합해 결과 배열을 생성해야 합니다.접근 방법이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.1단계: 문자열을 개별 문자로 분리해 배열에 저장합니다.2단계: 길이가 n인 문자열은 최대 2n개의 조합을 가질 수 있으므로, 비트 연산(&)을 활용해 각 문자의 포
JavaScript에서 알파벳을 포함할 수 있는 문자열을 입력받아, 그 안에 존재하는 모음(vowel)의 개수를 세어 반환하는 함수를 작성해야 합니다.접근 방식이 문제는 다음과 같은 단계로 해결할 수 있습니다.먼저 입력받은 문자열을 toLowerCase() 메서드를 사용해 모두 소문자로 변환합니다. 이렇게 하면 대문자와 소문자를 구분하지 않고 모음을 확인할 수 있습니다.다음으로 모음 문자들을 담은 기준 문자열(legend)인 aeiou를 준비합니다. 그런 다음 반복문을 통해 문자열의 각 문자를 하나씩 확인하며, 해당 문자가 기준 문
단위 행렬(Identity Matrix)이란?단위 행렬은 n × n 크기의 정사각형 행렬로, 주대각선(main diagonal)의 요소는 모두 1이고, 나머지 요소는 모두 0으로 구성된 행렬을 말합니다.예를 들어, 3차 단위 행렬은 다음과 같습니다.const arr = [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ];문제 정의숫자 하나(n)를 입력받아 해당 크기의 n × n 단위 행렬을 반환하는 JavaScript 함수를 작성해야 합니다.구현 예제다음은 이중 반복문을 활용한 구현 코드입니다. 행
트리보나치 수열이란?트리보나치(Tribonacci) 수열은 피보나치 수열을 일반화한 개념입니다. 피보나치 수열에서는 각 항이 앞의 두 항의 합으로 결정되지만, 트리보나치 수열에서는 각 항이 바로 앞의 세 항의 합으로 결정됩니다.예를 들어 트리보나치 수열의 첫 몇 개 항은 다음과 같습니다.0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149각 숫자가 이전 세 개의 숫자를 더한 값임을 확인할 수 있습니다. 예를 들어 7은 2 + 4 + 1의 결과이며, 13은 4 + 7 + 2의 결과입니다.문제 정의숫자 하나, 예를
이번 글에서는 정수 배열과 하나의 정수를 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 이 함수의 목표는 원본 배열을 두 번째 인수로 전달된 개수(n개)의 하위 배열(부분 집합)로 나눌 수 있는지 확인하고, 모든 하위 배열의 합이 서로 동일한 경우 true를 반환하는 것입니다.문제 이해하기예를 들어 입력값이 다음과 같다고 가정해 보겠습니다.const arr = [4, 3, 2, 3, 5, 2, 1]; const num = 4;이 경우 출력은 true가 되어야 합니다. 왜냐하면 배열을 다음과 같은 네 개의 하위 배열로 나
JavaScript로 개발하다 보면 여러 개의 객체가 담긴 배열을 하나의 단일 객체로 합쳐야 하는 경우가 종종 발생합니다. 이번 글에서는 객체 배열 내 모든 속성(property)을 하나의 객체로 병합하는 방법을 알아보겠습니다.문제 상황다음과 같은 객체 배열이 있다고 가정해 보겠습니다.const arr = [{ name: Dinesh Lamba, age: 23, occupation: Web Developer, }, { address: Vasant Vihar, experience: 5, is
이번 글에서는 문자열 하나를 인수로 받아, 포함된 모든 알파벳의 대소문자를 서로 뒤바꾸어 새로운 문자열을 만들어 반환하는 JavaScript 함수를 작성해 보겠습니다.문제 정의입력 문자열에는 대문자와 소문자가 섞여 있을 수 있습니다. 함수는 원본 문자열을 기반으로 다음 조건을 만족하는 새 문자열을 생성해야 합니다.모든 대문자는 소문자로 변환모든 소문자는 대문자로 변환공백이나 숫자 등 알파벳이 아닌 문자는 그대로 유지예를 들어 ThIs Is A STriNG이 입력되면 tHiS iS a stRIng이 결과로 나와야 합니다.구현 코드다음
문제 정의JavaScript에서 카멜 케이스(camelCase)로 작성된 문자열을 받아, 지정한 구분자를 기준으로 단어를 나누고 모두 소문자로 변환하는 함수를 만들어 보겠습니다. 이러한 과정을 흔히 언카멜라이징(uncamelizing)이라고 부릅니다.함수는 두 개의 인수를 받습니다.첫 번째 인수: 카멜 케이스 문자열 (예: thisIsAString)두 번째 인수: 단어 사이에 삽입할 구분자 문자 (예: _)함수는 입력 문자열의 단어를 두 번째 인수로 전달된 구분자로 분리하고, 각 단어를 소문자로 변환한 뒤 하나의 문자열로 연결하여
두 개의 문자열 str1과 str2를 인자로 받는 JavaScript 함수를 작성해야 합니다.str1의 길이는 항상 str2보다 길다는 조건이 주어집니다. 우리가 찾아야 할 것은 str2에 포함된 모든 문자를 하나 이상씩 담고 있는 str1 내부의 가장 짧은 연속 부분 문자열입니다.문제 예시예를 들어 입력 문자열이 다음과 같다면 −const str1 = abcdefgh;const str2 = gedcf;출력 결과는 다음과 같아야 합니다 −const output = cdefg;cdefg는 str2(gedcf)의
문자열을 다루다 보면 여는 괄호 (와 닫는 괄호 )가 서로 올바르게 짝을 이루고 있는지 확인해야 하는 경우가 자주 있습니다. 이번 글에서는 문자열을 입력받아 모든 여는 괄호에 대응하는 닫는 괄호가 존재하는지 검사하고, 짝이 맞으면 true, 그렇지 않으면 false를 반환하는 JavaScript 함수를 만들어 보겠습니다.문제 정의요구 사항은 다음과 같습니다.괄호를 포함할 수 있는 문자열을 입력받는다.모든 여는 괄호에 닫는 괄호가 올바른 순서로 대응하면 true를 반환한다.짝이 맞지 않거나 순서가 어긋나면 false를 반환한다.예시
JavaScript에서는 문자열을 인자로 받아 for 루프를 사용해 역순으로 된 새로운 문자열을 만드는 함수를 작성할 수 있습니다. 이 방법은 내장 메서드에 의존하지 않고 문자열의 각 문자를 끝에서부터 앞으로 순회하며 새 문자열에 하나씩 추가하는 원리입니다.동작 원리먼저 입력받은 문자열의 길이를 구한 뒤, 마지막 인덱스(len - 1)부터 시작해 0까지 거꾸로 반복하면서 각 위치의 문자를 결과 변수에 이어 붙입니다. 모든 반복이 끝나면 완성된 역순 문자열을 반환합니다.예제 코드다음은 실제 동작하는 코드입니다.= 0; i--) {
이번 글에서는 문자열을 하나의 인수로 받아, 그 안에서 가장 긴 단어를 찾아 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다. 함수는 문자열을 순회하면서 각 단어의 길이를 비교하고, 가장 길이가 긴 단어를 결과로 돌려주어야 합니다.문제 이해하기예를 들어 입력 문자열이 다음과 같다고 가정해 보겠습니다.const str = Coding in JavaScript is really fun;이 경우 함수는 각 단어(Coding, in, JavaScript, is, really, fun)의 길이를 비교한 뒤, 가장 긴 단어인
문제 개요정렬된 숫자 배열을 입력받아 해당 데이터 세트의 평균(mean)과 최빈값(mode)을 계산한 뒤, 두 값이 서로 같으면 true, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.예시입력 배열이 다음과 같다고 가정해 봅시다.const arr = [5, 3, 3, 3, 1];이 배열의 평균은 (5 + 3 + 3 + 3 + 1) ÷ 5 = 3이고, 가장 자주 등장하는 값인 최빈값 역시 3입니다. 따라서 이 배열에 대한 출력 결과는 true가 됩니다.구현 코드다음은 위 문제를 해결하는 전체 코드입
숫자 배열을 인수로 받아, 배열에 포함된 모든 숫자의 합(sum)과 곱(product)을 각각 계산한 뒤, 두 값의 절대적인 차이를 반환하는 JavaScript 함수를 작성해야 합니다.문제 접근 방식이 문제는 배열의 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 반복 과정에서 누적 객체에 sum과 product 두 값을 함께 유지하면서 각 요소를 처리합니다.sum의 초기값은 0으로 설정합니다. 덧셈의 항등원이기 때문입니다.product의 초기값은 1로 설정합니다. 곱셈의 항등원이기 때문입니다.모든 요소를 순회한 후
중첩된 배열(nested array)이 주어졌을 때, 모든 요소를 한 겹의 배열로 펼쳐내는 작업을 배열 평탄화(flattening)라고 합니다. 이번 글에서는 JavaScript를 사용해 깊이 중첩된 리터럴 배열을 재귀(recursion) 방식으로 평탄화하는 함수를 직접 구현해 보겠습니다.문제 정의하나의 중첩 배열을 인수로 받아, 입력 배열에 포함된 모든 리터럴(literal) 요소를 중첩 없이 담고 있는 새로운 배열을 반환하는 JavaScript 함수를 작성해야 합니다.예시입력 배열이 다음과 같다면 —const arr = [
합집합(Union)이란?합집합은 두 집합의 모든 원소를 하나로 합쳐 만든 집합입니다. 즉, 집합 A와 B의 합집합은 A에 속하거나, B에 속하거나, 또는 양쪽 모두에 속하는 원소 전체를 의미합니다.예를 들어 −두 개의 배열로 표현된 집합이 다음과 같다고 가정해 보겠습니다.const arr1 = [1, 2, 3]; const arr2 = [100, 2, 1, 10];이때 두 집합의 합집합은 다음과 같습니다.const union = [1, 2, 3, 10, 100];정리하면, 우리가 작성해야 할 함수는 리터럴 값으로 이루어진
n × n 크기의 정사각 행렬(배열의 배열)을 입력받아 시계 방향으로 90도 회전시키는 JavaScript 함수를 작성해야 합니다. 여기서 중요한 조건은 추가 배열을 새로 할당하지 않고 제자리(in-place)에서 수행해야 한다는 점입니다.문제 이해하기예를 들어, 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];이 배열을 시
이번 글에서는 동적 계획법(Dynamic Programming)을 활용해 2차원 격자 위에서 시작점부터 끝점까지 갈 수 있는 고유한 경로의 개수를 구하는 방법을 알아보겠습니다.문제 정의m × n 크기의 2차원 배열(격자)이 있다고 가정해 봅시다. 한 사람은 왼쪽 상단의 시작 블록인 (0, 0)에서 출발하여 오른쪽 하단의 마지막 블록까지 이동하려고 합니다.여기에는 하나의 제약 조건이 있습니다. 바로 한 번에 한 칸씩 아래로 또는 오른쪽으로만 이동할 수 있다는 것입니다.우리는 격자의 높이(height)와 너비(width)를 인자로 받아