자바스크립트 개발을 하다 보면 객체의 키(key)와 값(value)을 서로 뒤바꿔야 하는 경우가 종종 있습니다. 이번 글에서는 기존 객체의 값을 새로운 키로, 기존 키를 새로운 값으로 바꾸는 역방향 매핑(reverse map) 함수를 만드는 방법을 알아보겠습니다. 문제 상황 다음과 같은 객체가 있다고 가정해 보겠습니다. const obj = { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }; 이 객체의 키와 값을 뒤집어서, 숫자가 키가 되고 문자가 값이 되도록 만들어야 합니다. 즉, 아
이번 글에서는 YYYY-MM-DD 형식의 두 날짜를 각각 첫 번째와 두 번째 인수로 전달받아, 두 날짜 사이의 일 수를 계산하여 반환하는 자바스크립트 함수를 작성해 보겠습니다.예를 들어 다음과 같은 입력이 주어졌을 때 −const str1 = 2020-05-21;const str2 = 2020-05-25;함수는 아래와 같은 결과를 반환해야 합니다.const output = 4;예제 코드const str1 = 2020-05-21;const str2 = 2020-05-25;const daysBetweenDates = (str
문제 소개숫자 하나를 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다. 이 함수는 숫자의 모든 자릿수를 더한 뒤, 그 합이 한 자릿수가 될 때까지 같은 연산을 계속 반복해야 합니다.예를 들어 다음과 같은 숫자가 주어졌다고 가정해 보겠습니다.const num = 54564567;함수는 아래와 같은 방식으로 자릿수를 반복해서 더합니다.5+4+5+6+4+5+6+7 = 424+2 = 6따라서 최종 출력값은 6입니다.구현 방법먼저 각 자릿수의 합을 구하는 재귀 함수 sumDigits를 정의합니다. 이 함수는 num %
이번 글에서는 숫자 배열을 요소로 갖는 2차원 배열을 입력받아, 각 하위 배열에 대해 부분 합계(partial sum) 배열을 만드는 JavaScript 함수를 작성해 보겠습니다.부분 합계란?부분 합계 배열이란, 특정 위치의 값이 자기 자신과 그 이전 값들을 모두 더한 누적 합으로 대체된 배열을 의미합니다. 즉, 각 요소는 현재 값과 앞선 모든 값의 합계가 됩니다.예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];이 경우 기대되는 출
JavaScript에서 객체(Object)에 담긴 데이터를 다루다 보면, 키(key)와 값(value)을 한 쌍씩 묶어 별도의 배열로 변환해야 하는 경우가 자주 발생합니다. 예를 들어, 객체를 순회하면서 각 속성을 표 형태로 출력하거나, Map 구조로 변환하거나, API 응답을 가공할 때 이런 처리가 필요합니다.문제 정의리터럴 값들로 구성된 객체를 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열 안에 배열이 중첩된 형태(2차원 배열)를 반환해야 하며, 각 하위 배열은 정확히 두 개의 요소를 포함해야 합니다.
JavaScript 문자열 마스킹이란?문자열 마스킹(masking)은 전화번호나 신용카드 번호처럼 일정한 형식을 가진 데이터를 미리 정의된 패턴에 맞게 변환하는 기법입니다. 예를 들어 연속된 숫자만 있는 문자열에 공백이나 하이픈을 삽입해 사람이 읽기 쉬운 형태로 바꿀 수 있습니다.이번 글에서는 두 개의 인자를 받는 JavaScript 함수를 작성해 보겠습니다. 첫 번째 인자는 원본 문자열, 두 번째 인자는 형식을 정의하는 패턴 문자열입니다.문자열과 패턴이 다음과 같다고 가정해 보겠습니다.const str = 123456789;con
문자열 하나를 유일한 인수로 받아, 해당 문자열에서 만들 수 있는 모든 부분 문자열(substring)을 재귀적으로 생성한 뒤 배열로 반환하는 JavaScript 함수를 작성해 보겠습니다.길이가 n인 문자열은 시작 위치와 끝 위치의 조합에 따라 총 n × (n + 1) / 2개의 부분 문자열을 가집니다. 예를 들어 example(7자)의 경우 28개의 부분 문자열이 만들어집니다.반복문으로 살펴보는 기본 아이디어시작 인덱스 i와 끝 인덱스 j를 이중 반복문으로 조합하면 모든 부분 문자열을 손쉽게 추출할 수 있습니다. String.pr
문제 소개다음과 같이 문자열 값과 배열이 섞여 있는 중첩 배열(nested array)이 있다고 가정해 보겠습니다.const arr = [ Value 1, [Inner value 1, Inner value 2, Inner value 3, Inner value 4], Value 2, Value 3, Value 4, Value 5, Value 6 ];우리가 작성해야 할 프로그램은 이처럼 임의의 깊이로 중첩된 배열을 받아 HTML의 중첩된 순서 없는 목록(<ul>)으로 변환하는 자바스크립트 코드입니다.여기서 유일하게 주
개요이번 튜토리얼에서는 별도의 헬퍼(helper) 함수인 range()의 도움을 받아 JavaScript로 팩토리얼(계승) 함수를 작성하는 방법을 살펴보겠습니다.range() 함수는 1부터 입력받은 숫자까지의 연속된 숫자들을 배열로 만들어 주는 역할을 합니다. 이후 메인 함수인 factorial()은 이 배열 위에서 Array.prototype.reduce() 메서드를 실행하여 배열의 모든 요소를 곱함으로써 팩토리얼 값을 계산합니다.동작 원리예를 들어 factorial(5)가 호출되면 다음과 같은 과정으로 진행됩니다.range(1,
JavaScript로 개발하다 보면 배열을 값으로 가지는 객체에서 특정 값이 어느 키에 속하는지 찾아야 하는 경우가 종종 있습니다. 이 글에서는 그러한 문제를 해결하는 함수를 작성하는 방법을 살펴보겠습니다.문제 상황다음과 같이 각 키의 값으로 문자열 배열을 가지는 객체가 있다고 가정해 보겠습니다.const obj = { key1: [value11, value12, value13, value14, value15], key2: [value21, value22, value23, value24, value25, value26,
문제 개요줄을 서 있는 사람들의 목록이 무작위 순서로 주어졌다고 가정해 보겠습니다. 각 사람은 두 개의 정수 쌍 (h, k)으로 표현됩니다. 여기서 h는 그 사람의 키이고, k는 이 사람 앞에 서 있는 사람 중 키가 h 이상인 사람의 수를 의미합니다.우리는 이 정보만 가지고 원래 대기열을 재구성하는 알고리즘을 작성해야 합니다.참고 − 사람 수는 1,100명 미만이라고 가정합니다.예시 − 입력 대기열이 다음과 같다면,const arr = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
문제 이해하기서로 다른 숫자들로 구성된 m × n 크기의 행렬이 주어졌을 때, 이 2차원 배열 안에서 모든 행운의 숫자(lucky number)를 찾아 임의의 순서로 반환하는 것이 이번 글의 목표입니다.여기서 행운의 숫자란, 해당 원소가 자신이 속한 행(row)에서는 최솟값이면서 동시에 열(column)에서는 최댓값인 숫자를 의미합니다.예시다음과 같은 입력 배열이 있다고 가정해 보겠습니다.const arr = [ [3,7,8], [9,11,13], [15,16,17] ];이때 기대되는 출력은 다음과 같습니다.c
이 글에서는 첫 번째 인자로 숫자 배열을, 두 번째 인자로 하나의 숫자를 전달받는 자바스크립트 함수를 작성합니다. 함수의 역할은 배열 안에 해당 숫자가 존재하면 그 값을 찾아 제거하고, 그 오른쪽에 있던 모든 요소를 한 칸씩 왼쪽으로 밀어 넣는 것입니다. 단, slice(), splice()처럼 배열의 요소를 직접 삭제하거나 재배치하는 내장 메서드는 사용할 수 없다는 조건이 있습니다. 오직 인덱스 접근과 반복문만으로 문제를 해결해야 합니다. 만약 배열에 같은 숫자가 여러 개 존재한다면 가장 먼저 등장하는 첫 번째 값만 제거하면 됩
이번 글에서는 리터럴 값으로 이루어진 배열을 입력받아, 배열 안에 포함된 #의 인덱스 위치는 그대로 유지하면서 나머지 요소들만 반전시키는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같은 배열이 주어졌을 때,[18, -4, #, 0, 8, #, 5]기대하는 결과는 아래와 같습니다.[5, 8, #, 0, -4, #, 18]즉, 숫자 요소들은 서로 뒤바뀌지만 #은 원래 자리(인덱스)에 그대로 남아 있어야 합니다.구현 예제 코드const arr = [18, -4, #, 0, 8, #, 5]; const arr1 = [1
문제 정의 항상 0에서 시작하여 양의 정수 n에서 끝나는 구간이 있다고 가정해 보겠습니다. 이 구간은 배열 형태로 다음과 같이 표현할 수 있습니다. const interval = [0, n]; 범위가 항상 0에서 시작한다는 점을 이미 알고 있으므로, 더 간단하게 상한값만으로 구간을 나타낼 수도 있습니다. const interval = n; 요구 사항 두 개의 숫자를 각각 첫 번째, 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다. 첫 번째 인수는 0부터 해당 숫자까지의 구간을 의미하고, 두 번째 숫자는 실제 구간을
문제 소개숫자로 이루어진 배열을 첫 번째 인수로, 하나의 숫자를 두 번째 인수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 배열 안에서 연속된 요소들로 이루어진 부분 배열(subarray) 중 그 합이 두 번째 인수로 전달된 값과 정확히 일치하는 구간의 총 개수를 찾아 반환해야 합니다.이 문제에서는 배열의 모든 요소가 양수라고 보장됩니다. 이 조건 덕분에 슬라이딩 윈도우(sliding window) 기법을 안전하게 적용할 수 있습니다.문제 예시입력이 다음과 같다고 가정해 보겠습니다.const arr = [1, 1, 1];
문제 소개숫자 배열을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 원본 배열의 각 요소마다 자신보다 작은 숫자가 몇 개 있는지를 세어, 그 결과를 새로운 숫자 배열로 반환해야 합니다.예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [3, 5, 4, 1, 2];그렇다면 기대하는 출력 결과는 다음과 같습니다.const output = [2, 4, 3, 0, 1];결과를 하나씩 해석해 보면 다음과 같습니다.3보다 작은 수는 1, 2 → 총 2개5보다 작은 수는 3, 4, 1, 2 → 총
숫자 배열을 입력받아 해당 배열의 중앙값(median)을 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.중앙값의 통계적 의미중앙값은 오름차순 또는 내림차순으로 정렬된 숫자 목록에서 정확히 가운데에 위치한 값을 의미합니다. 극단적으로 크거나 작은 이상치(outlier)의 영향을 거의 받지 않기 때문에, 평균보다 데이터 집합의 실제 특성을 더 잘 설명해 주는 경우가 많습니다.접근 방법먼저 배열을 오름차순으로 정렬한 뒤, 배열의 길이에 따라 로직을 나누어 처리합니다.배열 길이가 홀수인 경우: 정렬된 배열의 정중앙에 있
문제 이해하기숫자 하나를 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 숫자를 n이라고 부르겠습니다.이 함수는 피보나치(Fibonacci) 수열의 n번째 항을 반환해야 합니다.예시fibonacci(10) → 55fibonacci(3) → 2fibonacci(6) → 8fibonacci(2) → 1접근 방법피보나치 수열은 첫 두 항이 모두 1이며, 그 이후의 각 항은 바로 앞의 두 항을 더한 값으로 정의됩니다. 즉, 수열은 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ... 와 같이 진
문자열 리터럴로 이루어진 배열을 인수로 받아, 배열에 포함된 문자열들의 가능한 모든 조합을 생성하고 반환하는 자바스크립트 함수를 작성해야 합니다.문제 예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [a, b, c, d];이 경우 기대하는 출력 결과는 다음과 같습니다.const output = [a, ab, abc, abcd, abd, ac, acd, ad, b, bc, bcd, bd, c, cd, d];접근 방식이 문제는 재귀(Recursion)를 활용하면 깔끔하게 해결할 수 있습니다. 핵심 아이디어는 다음과