JavaScript에서 두 개의 숫자만 담긴 배열을 원하는 개수만큼 동일한 간격으로 나눠야 하는 경우가 종종 있습니다. 이번 글에서는 parseEqualInterval()이라는 함수를 직접 작성해 보겠습니다.이 함수는 첫 번째 인자로 정확히 두 개의 요소를 가진 숫자 배열을, 두 번째 인자로 숫자 n을 받습니다. 그런 다음 원래 배열의 두 요소 사이에 등간격의 값 n-1개를 삽입하여 전체 구간을 n개의 동일한 간격으로 나눕니다.동작 예시// 입력 배열이 다음과 같고 const arr = [12, 48]; // 간격(interval)
중첩된(nested) 객체를 키 경로가 점(.)으로 이어진 하나의 평면(flat) 객체로 변환해야 하는 경우가 종종 있습니다. 예를 들어 다음과 같은 입력 객체가 주어졌을 때 −const input = { a: 0, b: {x: {y: 1, z: 2}}, c: 3 };함수는 아래와 같은 출력을 반환해야 합니다.const output = { a: 0, b.x.y: 1, b.x.z: 2, c: 3 }즉, 중첩 객체 내부의 모든 값을 최상위 레벨로 끌어올리되, 원래 위치를 나타
혼합된 데이터 타입을 가진 배열을 입력받아, 각 요소를 데이터 타입별로 그룹화한 Map() 객체를 반환하는 classifyArray() 함수를 작성해야 한다고 가정해 보겠습니다.동작 예시예를 들어 다음과 같은 배열이 입력으로 주어졌을 때: [ true, false ] }구현 코드이 함수는 reduce() 메서드와 typeof 연산자를 활용하면 간단하게 구현할 수 있습니다. 각 요소의 타입을 키로 사용하고, 같은 타입의 요소들을 하나의 배열로 묶어 Map에 저장하는 방식입니다. { const previousData =
숫자 리터럴로 구성된 배열이 있고, 이 배열을 인자로 받아 10보다 큰 숫자를 개별 자릿수로 분할한 새로운 숫자 배열을 반환하는 함수(예: splitDigit())를 작성해야 한다고 가정해 봅시다.문제 이해하기예를 들어 다음과 같은 입력이 주어졌을 때://입력이 다음과 같다면:const arr = [ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106 ]//출력은 다음과 같아야 합니다:const output = [ 9, 4, 9, 5, 9, 6, 9, 7, 9, 8, 9, 9, 1
문자열로 이루어진 중첩(nested) 배열이 있을 때, 이 배열과 검색할 문자열을 인자로 받아 해당 문자열이 중첩 배열 전체에서 몇 번 나타나는지 그 개수를 반환하는 함수를 작성해야 한다고 가정해 봅시다.배열이 여러 깊이로 중첩되어 있기 때문에 단순한 반복문만으로는 해결할 수 없습니다. 이럴 때 재귀(recursion)를 활용하면 깊이에 상관없이 모든 요소를 탐색할 수 있습니다. 아래에서 코드를 살펴보겠습니다.예제 { let count = 0; for (let i = 0; i < arr.length; i++) {
이번 글에서는 Math.min() 같은 내장 라이브러리 함수를 사용하지 않고, n개의 숫자 리터럴을 인자로 받아 그중 가장 작은 값을 반환하는 함수를 작성해 보겠습니다. 여기서 n은 임의의 자연수입니다.접근 방법핵심 아이디어는 간단합니다. 변수 하나를 무한대(Infinity)로 초기화한 뒤, 배열의 모든 요소를 순회하면서 현재 값이 저장된 최솟값보다 작으면 그 값을 새로운 최솟값으로 교체하는 방식입니다. 이 과정은 while 반복문을 사용해 구현할 수 있습니다.예제 코드 { let min = Infinity, len = 0;
JavaScript에서 중첩된(nested) 배열을 받아 모든 요소를 하나의 평면적인 배열로 만들어 반환하는 함수를 작성해야 하는 경우가 자주 있습니다.예를 들어 다음과 같습니다.// 입력이 다음과 같다면:const arr = [[1, 2, 3], [4, 5], [6]];// 출력은 이렇게 되어야 합니다:const output = [1, 2, 3, 4, 5, 6];즉, 여러 겹으로 감싸인 배열의 모든 요소를 꺼내어 하나의 배열에 담는 배열 평탄화(flattening) 작업입니다. 그럼 이 기능을 구현하는 두 가지 방법을 살펴보겠습니
숫자로 이루어진 배열을 입력받아, 원본 배열에서 인접한 두 요소의 차이를 새로운 배열로 반환하는 함수를 작성해야 합니다. 함수 이름은 예를 들어 arrayDistance()라고 정하겠습니다.예를 들어, 입력 배열이 다음과 같다면 −const arr = [1000,2000,5000,4000,300,0,1250];출력 결과는 아래와 같이 각 인접 요소 쌍의 차이가 됩니다 −[(1000-2000),(2000-5000),(5000-4000),(4000-300),(300-0),(0-1250)]구현 방법이 문제는 Java
중복된 항목이 포함된 숫자 배열이 주어졌을 때, 이 배열을 입력받아 동일한 값들을 하나의 하위 배열(subarray)로 묶은 새로운 배열을 반환하는 함수를 작성하는 것이 목표입니다.문제 예시예를 들어 다음과 같은 경우를 생각해 볼 수 있습니다.//입력 배열이 다음과 같다면:const arr = [1, 3, 3, 1];//출력 결과는 다음과 같아야 합니다:const output = [[1, 1], [3, 3]];해결 접근 방식이 문제는 해시맵(HashMap) 객체를 활용해 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.해시맵에
다음과 같이 숫자 리터럴로 구성된 배열에 연속으로 중복된 값들이 포함되어 있다고 가정해 보겠습니다.const testArr = [1, 1, 2, 2, 3, 3, 1, 1, 1];우리는 이 배열을 인자로 받아 연속된 중복 항목을 제자리(in-place)에서 모두 제거하는 compress 함수를 작성해야 합니다. 함수 실행 후 배열은 다음과 같은 형태가 됩니다.const output = [1, 2, 3, 1];주의할 점은 단순히 고유한 값만 남기는 것이 아니라, 연속해서 반복되는 항목만 제거한다는 것입니다. 위 예시에서 마지막의 1은
JavaScript에서는 문자열 또는 숫자 리터럴로 이루어진 배열 arr을 첫 번째 인수로, 숫자 n을 두 번째 인수로 받는 chunk() 함수를 작성해야 하는 경우가 있습니다.이 함수는 최대 arr.length / n개의 요소를 가진 n개의 하위 배열(subarray)을 담은 배열을 반환해야 합니다. 이때 요소의 분배 방식은 다음과 같습니다.첫 번째 요소는 첫 번째 하위 배열에, 두 번째 요소는 두 번째 하위 배열에, 세 번째 요소는 세 번째 하위 배열에 순서대로 배치됩니다. 모든 하위 배열에 하나씩 요소가 채워지면, 다시 첫 번
문제 개요숫자 1에서 시작해 매 단계마다 5를 더하거나 3을 곱하는 연산을 반복하면, 무한히 많은 새로운 숫자를 만들어낼 수 있습니다. 우리가 작성해야 할 함수는 하나의 숫자를 입력받아, 이러한 덧셈과 곱셈의 조합으로 해당 숫자를 만들어낼 수 있는 수열이 존재하는지 찾고, 그 결과를 불리언(Boolean) 값으로 반환하는 것입니다.예시숫자 13은 먼저 3을 곱한 뒤 5를 두 번 더하면 만들 수 있습니다(1 × 3 + 5 + 5 = 13). 따라서 함수는 13에 대해 true를 반환해야 합니다. 반면 숫자 15는 어떤 조합으로도 만들
배열의 length 속성에 접근하지 않고, 어떠한 내장 반복문도 사용하지 않은 채 배열의 가운데 요소를 반환하는 함수 findMiddle을 작성해야 합니다. 배열의 요소 개수가 홀수라면 가장 중앙에 있는 하나의 요소를 반환하고, 짝수라면 중앙에 위치한 두 개의 요소를 담은 배열을 반환해야 합니다.접근 방식: 재귀를 활용한 구현이 문제는 재귀(recursion)를 활용하면 깔끔하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.인덱스를 0부터 시작해 재귀 호출마다 1씩 증가시키며 배열을 순회합니다.현재 인덱스에 해당하는 요소가
파이썬에는 여러 개의 반복 가능한(iterable) 객체를 인덱스별로 묶어주는 zip() 함수가 내장되어 있습니다. 이번 글에서는 이와 동일한 기능을 수행하는 JavaScript 함수를 직접 작성해 보겠습니다.즉, 길이가 같은 여러 개의 배열이 주어졌을 때, 같은 인덱스에 있는 요소들을 하나의 배열로 묶어 새로운 배열을 반환하는 것이 목표입니다.예를 들어 다음과 같은 세 개의 배열이 있다고 가정해 보겠습니다.const array1 = [1, 2, 3]; const array2 = [a,b,c]; const array3 = [4, 5
JavaScript 개발을 하다 보면 객체 배열을 다른 형태의 배열로 변환해야 하는 경우가 자주 발생합니다. 이번 글에서는 각 객체가 가진 특정 속성 값을 기반으로 새로운 배열을 만드는 방법을 코드 예제와 함께 살펴보겠습니다.문제 상황예를 들어, 다음과 같은 객체 배열이 있다고 가정해 보겠습니다.const arr = [{ country: canada, count: 2 }, { country: jamaica, count: 2 }, { country: russia, count: 1 }, {
두 개의 숫자를 인자로 받아 해당 숫자들의 최소 공배수(Least Common Multiple)를 반환하는 함수를 작성해야 합니다.최소 공배수(LCM)란?두 숫자 a와 b의 최소 공배수란, a와 b 모두로 나누어 떨어지는 가장 작은 양의 정수를 의미합니다.예를 들어, 6과 8의 최소 공배수는 24입니다. 24가 6과 8 모두로 나누어 떨어지는 가장 작은 양의 정수이기 때문입니다.LCM을 계산하는 방법두 숫자 a와 b의 LCM을 구하는 여러 가지 방법 중 하나는, a와 b의 곱을 두 숫자 모두를 나눌 수 있는 가장 큰 정수, 즉 최대
두 개의 숫자 a와 b가 담긴 배열을 인자로 받아, [a, b] 범위에 포함된 모든 정수의 최소공배수(Least Common Multiple, LCM)를 반환하는 함수를 작성해 보겠습니다. 접근 방법 먼저 두 숫자의 최소공배수를 계산하는 기본 함수를 작성합니다. 이 함수가 준비되면 [a, b] 범위 안의 각 숫자에 대해 재귀적으로 호출하면서 결과를 누적하고, 범위의 끝에 도달하면 최종 값을 반환하는 방식으로 문제를 해결할 수 있습니다. 예제 코드 const lcm = (a, b) => { &nb
이번 글에서는 문자열 배열과 하나의 기준 문자열을 인자로 받아, 배열의 요소 중에 기준 문자열의 부분 수열(subsequence)에 해당하는 요소가 존재하는지 판별하는 함수를 작성해 보겠습니다. 조건을 만족하는 요소가 있으면 true, 없으면 false를 반환하는 것이 목표입니다. 문제 이해하기 예를 들어 기준 문자열이 ACBC일 때 다음과 같은 결과가 나와야 합니다. const x = ACBC; const arr = [cat,AB]; const arr2 = [cat,234,C]; const arr3 = [cat,CC]; con
이번 글에서는 숫자 배열을 유일한 인자로 받아, 짝수 인덱스에 위치한 숫자는 그대로 반환하고, 홀수 인덱스에 위치한 숫자는 해당 인덱스 값과 곱하여 반환하는 함수를 작성해 보겠습니다.문제 이해하기예를 들어 다음과 같은 배열이 입력으로 주어진다고 가정해 봅시다.[5, 10, 15, 20, 25, 30, 50, 100]이때 함수는 아래와 같은 결과를 반환해야 합니다.[5, 10, 15, 60, 25, 150, 50, 700]결과를 살펴보면, 인덱스 1의 값 10은 그대로 유지되고(0을 곱한 것과 동일), 인덱스 3의 값 20은 3과 곱
사람들의 나이 정보를 담고 있는 2차원 배열이 있다고 가정해 보겠습니다.예제 데이터const data = [ [Rahul,23], [Vikky,27], [Sanjay,29], [Jay,19], [Dinesh,21], [Sandeep,45], [Umesh,32], [Rohit,28], ];요구 사항이 2차원 배열을 입력받아, 각 하위 배열의 첫 번째 요소(문자열)를 키(key)로, 두 번째 요소를 값(value)으로 하는 하나의 객체를 반환하는 함수를 작성해야 합니다.reduc