이번 글에서는 정확히 두 개의 숫자를 담고 있는 배열을 입력으로 받는 JavaScript 함수를 작성해 보겠습니다. 이 배열은 하나의 숫자 범위를 나타내며, 함수는 해당 범위에 포함된 모든 숫자의 최소 공배수(LCM, Least Common Multiple)를 계산하여 그 결과를 반환해야 합니다.접근 방식범위 전체의 최소 공배수를 구하는 가장 효율적인 방법은 최대 공약수(GCD)를 활용하는 것입니다. 두 수 a와 b의 최소 공배수는 다음 공식으로 구할 수 있습니다.LCM(a, b) = (a × b) / GCD(a, b)최대 공약수는
이진 탐색 트리(Binary Search Tree, BST)는 데이터를 효율적으로 저장하고 검색할 수 있는 자료구조입니다. 이번 글에서는 BinarySearchTree 클래스에 특정 값이 트리 안에 존재하는지 확인하는 contains 메서드를 구현하는 방법을 알아보겠습니다.구현 원리BST는 다음과 같은 규칙을 따릅니다.왼쪽 자식 노드는 항상 부모 노드보다 작은 값을 가집니다.오른쪽 자식 노드는 항상 부모 노드보다 큰 값을 가집니다.이 규칙 덕분에 값을 검색할 때 매 단계마다 탐색 범위가 절반으로 줄어들어, 평균적으로 O(log n)
JavaScript 프로그래밍을 하다 보면 특정 숫자의 배수에 해당하는 난수가 필요한 경우가 있습니다. 예를 들어 격자(grid) 기반 UI를 만들거나, 일정 간격으로 값을 배치해야 하는 상황에서 유용하게 사용할 수 있습니다.이번 글에서는 숫자 하나를 인수로 받아, 항상 그 숫자로 나누어 떨어지는 난수를 반환하는 JavaScript 함수를 작성해 보겠습니다.구현 원리핵심 아이디어는 간단합니다. 먼저 일반적인 난수를 생성한 뒤, 이를 원하는 숫자(n)로 나누고 반올림한 후 다시 n을 곱해주면 됩니다. 이렇게 하면 결과값이 항상 n의
JavaScript 프로그래밍을 하다 보면 문자열 배열 안에서 특정 문자로 시작하는 요소를 찾아야 하는 경우가 자주 있습니다. 예를 들어 이름 목록에서 K로 시작하는 이름이 처음 등장하는 위치를 알고 싶다면 어떻게 해야 할까요?이번 글에서는 문자열 배열과 한 개의 문자를 인자로 받아, 해당 문자로 시작하는 첫 번째 배열 요소의 인덱스를 반환하는 함수를 작성하는 방법을 알아보겠습니다.문제 정의요구 사항은 다음과 같습니다.첫 번째 인자: 문자열 리터럴로 이루어진 배열두 번째 인자: 검색할 단일 문자배열을 순회하며 해당 문자로 시작하는
서로 다른 정수로 이루어진 배열이 주어졌을 때, 배열에 포함된 숫자들의 가능한 모든 순열(permutation)을 반환해야 하는 문제를 생각해 볼 수 있습니다.예를 들어, 입력 배열이 다음과 같다면 −const arr = [1, 2, 3];출력 결과는 아래와 같아야 합니다 −const output = [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], &nb
문제 상황다음과 같이 항목 이름을 키로, 숫자를 값으로 가지는 객체 배열이 있다고 가정해 보겠습니다.const arr = [ {item1: 144}, {item2: 0}, {item3: 366}, {item4: 15}, {item6: 366}, {item7: 19}, {item8: 211}, {item9: 121} ];우리가 작성해야 할 것은 이러한 배열을 입력받아 객체들을 XL, L, M, S 네 개의 그룹으로 묶어 주는 자바스크립트 함수입니다. 여기서 중요한 점은, 숫자가
문제 이해하기첫 번째 인자로 문자열 배열(리터럴 배열)을, 두 번째 인자로 검색할 문자열을 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 두 번째 인자로 전달된 문자열이 배열의 각 요소 안에 몇 번이나 등장하는지 그 횟수를 반환해야 합니다.여기서 핵심은 완전히 일치하는 요소만 세는 것이 아니라, 배열 요소 문자열 안에 부분 문자열로 포함된 경우도 모두 세야 한다는 점입니다. 예를 들어 word, a word, another word처럼 서로 다른 요소들이 있어도, 세 요소 모두 word라는 단어를 포함하고 있다면 결과
숫자를 인수로 딱 하나만 받아서, 그 숫자가 지정한 길이만큼의 무작위(랜덤) 문자열을 반환하는 자바스크립트 함수를 작성해 보겠습니다.여기서 문자열 생성에 사용할 문자 집합은 영문 대문자와 소문자 알파벳으로만 구성되어야 하며, 공백·특수문자·숫자는 포함하지 않습니다.예제 코드구현 코드는 다음과 같습니다.const num = 13;const randomString = (len = 1) => { const charSet = ABC
JavaScript를 다루다 보면 2009-feb, 2010-jan처럼 연도와 월이 하나의 문자열로 결합된 데이터를 정렬해야 하는 경우가 종종 있습니다. 이런 형식의 배열을 가장 오래된 날짜부터 최신 날짜 순서(오름차순)로 정렬하는 방법을 알아보겠습니다.문제 상황다음과 같이 연도-월 형식의 문자열로 구성된 배열이 있다고 가정해 보겠습니다.const arr = [2009-feb, 2009-jan, 2010-mar, 2010-jan, 2011-jul, 2011-sep, 2011-jan, 2012-jan, 2012-dec, 2012-fe
데카르트 곱(Cartesian Product)이란?두 집합(배열) A와 B의 데카르트 곱은 A × B로 표기하며, 첫 번째 요소 a가 A에 속하고 두 번째 요소 b가 B에 속하는 모든 순서쌍 (a, b)의 집합을 의미합니다.좀 더 쉽게 설명하면, 두 배열의 데카르트 곱은 첫 번째 요소는 첫 번째 배열에서, 두 번째 요소는 두 번째 배열에서 가져온 가능한 모든 두 요소 조합의 배열이라고 할 수 있습니다.예를 들어, 다음과 같은 두 개의 배열이 있다고 가정해 보겠습니다.const arr1 = [1, 2, 3];const arr2 = [
JavaScript에서 두 문자열이 서로 같은지 확인해야 할 때가 있습니다. 이때 단순히 === 연산자를 사용하면 대소문자까지 구분하기 때문에, 대소문자를 무시하고 비교하려면 별도의 처리가 필요합니다.예를 들어 다음과 같은 함수를 작성한다고 가정해 보겠습니다.areEqual(done, DOne) → truedone과 DOne은 글자의 대소문자만 다를 뿐 내용은 동일하므로, 비교 결과는 true가 되어야 합니다.해결 방법: toLowerCase() 활용가장 간단하고 널리 사용되는 방법은 toLowerCase() 메서드로 두 문자열을
문제 정의다음과 같이 학생들의 과목별 점수가 담긴 2차원 배열이 있다고 가정해 보겠습니다.const arr = [ [English, 52], [Hindi, 154], [Hindi, 241], [Spanish, 10], [French, 65], [German, 98], [Russian, 10] ];여기서 해야 할 일은 이러한 배열을 입력받아 객체의 객체(object of objects) 형태로 반환하는 JavaScript 함수를 작성하는 것입니다.반환되는 객체는 각 고유한 과목마다 하나의 하위 객체를 가져야
JavaScript에서 두 개의 문자열을 받아, 첫 번째 문자열(str1) 안에 두 번째 문자열(str2)이 총 몇 번 등장하는지 세어 그 결과를 반환하는 함수를 작성해야 하는 경우가 종종 있습니다.예를 들어 다음과 같은 동작을 기대할 수 있습니다.count(this is a string, is) → 2 반환구현 예제아래 코드는 indexOf() 메서드를 활용해 문자열 내 특정 부분 문자열의 등장 횟수를 계산하는 함수입니다. 추가로 allowOverlapping 옵션을 통해 겹치는 패턴도 허용할지 여부를 지정할 수 있습니다. {
데이터베이스에서 조회한 t(true)와 f(false)로 표현된 불리언 배열이 있다고 가정해 보겠습니다.const arr = [f, t, f, t, t, t, f, f, t, t, t, t, t, t, f, t];우리가 작성해야 할 함수는 이러한 배열을 하나의 인자로 받아서, 앞뒤로 f에 둘러싸여 있는 연속된 t 값들의 묶음(cluster)별 개수를 계산한 뒤, 그 결과를 배열 형태로 반환하는 것입니다.따라서 위 배열의 경우 각 t 묶음의 길이는 다음과 같습니다.const output = [1, 3, 6, 1];문제 접근 방식이 문
두 개의 숫자를 인자로 받아 검색 범위를 지정하고, 그 범위 안에 포함된 소수 중 하나를 무작위로 골라 반환하는 JavaScript 함수를 작성해 보겠습니다. 범위 내의 모든 소수를 효율적으로 찾기 위해 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘을 활용합니다. 이 방식은 2부터 √max까지의 수에 대해 각각의 배수를 차례로 제거해 나가기 때문에, 비교적 넓은 범위에서도 빠른 속도로 소수 목록을 얻을 수 있습니다. 예제 코드 const range = [100, 1000]; // 에라토스테네스의 체로 min
문제 상황다음과 같은 JSON 객체가 있다고 가정해 보겠습니다. 각 카테고리(노트북, 데스크톱, 마우스, 키보드)는 제품 정보를 담은 객체 배열을 값으로 가지고 있습니다.const obj = { LAPTOP: [{ productId: 123 }], DESKTOP: [{ productId: 456 }], MOUSE: [{ productId: 789 }, { productId: 012 }], KEY-BOARD: [{
문제 이해하기임의 개수의 숫자 배열을 입력으로 받아, 각 인덱스 위치에 있는 값들 중 가장 큰 수를 골라 하나의 새로운 배열로 반환하는 자바스크립트 함수를 작성해 보겠습니다. 예를 들어 네 개의 배열이 주어졌다면, 네 배열의 첫 번째 요소 중 최댓값, 두 번째 요소 중 최댓값… 을 차례대로 추출한 배열이 결과로 나옵니다.예제 코드구현 코드는 다음과 같습니다.const arr1 = [117, 121, 18, 24]; const arr2 = [132, 19, 432, 23]; const arr3 = [32, 23, 137, 145];
문제 상황다음과 같은 객체가 있다고 가정해 보겠습니다.const obj = { 100: Jaipur, 101: Delhi, 102: Raipur, 104: Goa };이 객체를 첫 번째 인수로, 검색어(query)를 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 SQL의 LIKE 연산자처럼 동작하여, 전달받은 검색어를 값에 포함하는 모든 키/값 쌍을 반환해야 합니다.접근 방법가장 직관적인 해결 방법은 객체의 모든 키를 하나씩 순회하면서 각 값이 검색어를 포함하는지 확인하는
다음과 같이 반려동물에 대한 정보를 담고 있는 중첩된(nested) JavaScript 객체가 있다고 가정해 보겠습니다.const pets = { owner1: Frank, owner2: Curly, owner3: Maurice, dogs: { terriers: { &
이번 글에서는 숫자로 이루어진 배열을 N개의 그룹으로 나누는 JavaScript 함수를 작성해 보겠습니다. 이때 각 그룹은 크기가 큰 것부터 작은 것 순서대로 정렬되어야 합니다.예를 들어, 12개의 숫자로 이루어진 배열을 5개의 배열로 나눈다면 결과는 다음과 같이 균등하게 분배되며, 큰 그룹에서 작은 그룹 순으로 배치됩니다.const arr = [1,2,3,4,5,6,7,8,9,10,11,12];const output = [[1,2,3], [4,5,6], [7,8], [9,10], [11,12]];함수 설계함수는 첫 번째 인수로 원