정확히 두 개의 숫자를 요소로 가지며 하나의 범위를 나타내는 배열을 입력받는 JavaScript 함수를 작성해야 합니다.이 함수는 인자로 전달된 범위 안에서 무작위 정수를 생성해야 하며, 최솟값과 최댓값 양쪽 끝 숫자도 포함되어야 합니다.구현 원리무작위 정수를 만들기 위해 Math.random() 메서드를 활용합니다. Math.random()은 0 이상 1 미만의 소수를 반환하므로, 원하는 범위의 크기인 (최댓값 − 최솟값 + 1)을 곱하고 Math.floor()로 소수점을 버린 뒤 최솟값을 더하면 됩니다. 여기서 +1을 해주는 이
문제 개요 정수(Integer)로 이루어진 배열을 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열 안의 모든 홀수를 앞쪽에, 모든 짝수를 뒤쪽에 배치하도록 배열을 정렬합니다. 홀수끼리 또는 짝수끼리의 상대적인 순서는 중요하지 않으며, 단지 모든 홀수가 어떤 짝수보다도 먼저 위치하기만 하면 됩니다. 입력 예시 입력 배열이 다음과 같다고 가정해 보겠습니다. const arr = [0, 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 1]; 위 배열을 정렬하면 결과는 다음과 같은 형태가 됩니다. 홀수가 짝수보
JavaScript로 데이터를 다룰 때, 깊게 중첩된 JSON 구조 안의 특정 객체들에만 일괄적으로 식별자를 부여해야 하는 경우가 종종 있습니다. 이번 글에서는 재귀(Recursion)와 클로저(Closure)를 활용해 title 속성을 가진 모든 객체에 고유한 id를 추가하는 방법을 알아보겠습니다.문제 상황다음과 같이 여러 계층으로 중첩된 배열이 있다고 가정해 보겠습니다.const arr = [ { Arts: [ { Performing arts: [
문제 상황웹 애플리케이션을 개발하다 보면 목록 데이터에 여러 개의 필터 조건을 한 번에 적용해야 하는 경우가 자주 발생합니다. 이번 글에서는 두 개의 객체 배열을 받아, 필터 배열에 정의된 모든 키-값 쌍을 동시에 만족하는 객체만 골라내는 방법을 알아보겠습니다.먼저 아래와 같이 두 개의 배열이 있다고 가정해 봅시다.const data = [ {XD_A:XDL,XD_B_1:38,XD_B_2:PB}, {XD_A:XDR,XD_B_1:51,XD_B_2:PB}, {XD_A:XDL,XD_B_1:58,XD_B_2:PB}, {XD_
문제 개요오름차순으로 정렬된 숫자 배열이 있다고 가정해 보겠습니다.const arr = [2, 5, 7, 8, 9];우리는 이러한 배열을 입력으로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 입력 배열의 각 요소에 대해 새로운 하위 배열(subarray)을 생성해야 하며, 하위 배열에는 해당 요소와 그 뒤에 오는 요소들을 하나씩 비교한 차이값들이 포함되어야 합니다.동작 원리 이해하기첫 번째 배열 요소인 2를 기준으로 계산하면 다음과 같습니다.5 - 2 = 37 - 2 = 58 - 2 = 69 - 2 = 7따라서 첫
문제 상황다음과 같이 점(.)으로 구분된 숫자들로 이루어진 문자열 배열이 있다고 가정해 보겠습니다.const arr = [ .0, .1, .2, .4, .2.1, .3, .4.1, .5, .5.1.5 ];이 배열을 사람이 보기에 자연스러운 오름차순으로 정렬하는 JavaScript 함수를 작성해야 합니다.즉, .0이 가장 먼저 오고, 그다음 .1, .2, .3 순으로 정렬되며, 하위 단계를 포함한 문자열(예: .2.1)은 해당 상위 항목 바로 뒤에 위치해야 합니다. 따라서 정렬이 완료된 배열은 다음과 같은 모습이 됩니다.const o
문제 정의하나의 숫자를 입력받아 해당 숫자부터 0까지 카운트다운하면서 결과를 출력하는 재귀(Recursion) 기반 JavaScript 함수를 작성해야 합니다. 단, for나 while 같은 반복문은 사용할 수 없으며 오직 재귀 호출만으로 구현해야 한다는 조건이 있습니다.재귀의 동작 원리재귀 함수는 자기 자신을 다시 호출하는 구조로 동작합니다. 아래 코드에서는 카운터가 0보다 큰 동안 계속 자신보다 1 작은 값으로 함수를 호출합니다. 가장 마지막에 호출된 함수(counter가 0인 시점)부터 호출 스택이 하나씩 풀리면서 각 단계의
카운팅 정렬(Counting Sort)이란?카운팅 정렬은 비교 연산 없이 정렬을 수행하는 알고리즘입니다. 배열의 최댓값을 미리 알고 있다면 선형 시간 O(n)과 공간 안에 숫자 배열을 정렬할 수 있어, 데이터 범위가 제한적일 때 매우 효율적인 선택입니다.동작 원리는 간단합니다. 최댓값을 기준으로 그 크기만큼의 카운트 배열을 만들어 각 인덱스 값이 몇 번 등장했는지 세고, 이후 개수가 0이 아닌 인덱스들을 결과 배열에 순서대로 추출하는 방식입니다.구현 단계먼저 반복문 한 번으로 배열의 최댓값을 찾은 뒤, 카운팅 정렬을 적용해 배열을
이번 글에서는 문자열을 인자로 받아 해당 문자열이 회문(Palindrome)인지 판별하는 JavaScript 함수를 작성해 보겠습니다. 회문이란 앞에서 읽으나 뒤에서 읽으나 동일한 문자열을 의미합니다.대표적인 회문 문자열의 예시는 다음과 같습니다.madamdadabcdcba이 문제의 핵심 조건은 내장 문자열 메서드를 사용하거나, split() 등으로 문자열을 배열로 변환하지 않고 해결해야 한다는 점입니다.접근 방식: 두 포인터(Two Pointer) 기법가장 효율적인 방법은 문자열의 양 끝에서 시작하여 중앙으로 이동하며 한 글자씩
이번 글에서는 숫자를 인자로 하나 받아서, 그 숫자를 뒤집은 값과 원래 숫자 사이의 차이(절댓값)를 계산하는 JavaScript 함수를 작성해 보겠습니다.문제 정의함수는 다음과 같이 동작해야 합니다.인자로 받은 숫자의 자릿수를 뒤집은 값을 계산합니다.원래 숫자와 뒤집은 숫자 사이의 차이를 절댓값으로 반환합니다.예시입력 숫자가 다음과 같다고 가정해 봅시다.const num = 45467;이 숫자를 뒤집으면 76454가 됩니다.따라서 함수의 출력 결과는 다음과 같습니다.76454 - 45467 = 30987재귀를 활용한 해결 방법숫자를
아나그램(Anagram)이란?아나그램은 한 문자열의 글자 순서를 재배열했을 때 다른 문자열과 완전히 동일해지는 문자열 쌍을 의미합니다.예를 들어 hello와 lolhe는 아나그램입니다. lolhe의 글자들을 적절히 재배열하면 hello를 만들 수 있고, 그 반대도 가능하기 때문입니다.이번 글에서는 두 개의 문자열(str1, str2)을 인자로 받아, 두 문자열이 서로 아나그램이면 true, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.접근 방식가장 효율적인 방법은 각 문자열마다 문자별 등장 횟수를
문제 개요문자열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열 내 각 단어를 뒤집되, 단어들이 나열된 전체 순서는 원래 그대로 유지해야 합니다.여기서 단어란 양쪽이 공백으로 둘러싸여 있거나, 한쪽은 공백이고 다른 쪽은 문자열의 시작 또는 끝에 닿아 있는 부분 문자열을 의미합니다. 함수는 최종적으로 변환된 새 문자열을 반환해야 합니다.예시입력 문자열이 다음과 같다면 −const str = This is a string;기대하는 출력 결과는 다음과 같습니다 −const output =
이번 글에서는 문자열을 입력받아 각 단어의 첫 글자만 대문자로 변환한 새로운 문자열을 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.예를 들어, 입력 문자열이 다음과 같다면 −const str = this is some random string;함수 실행 후 기대되는 출력 결과는 다음과 같습니다.const output = This Is Some Random String;구현 예제 { const newWord = word[0].toUpperCase() + word.substr(1, word.len
문제 정의첫 번째 인수로 문자열을, 두 번째 인수로 숫자를 받는 JavaScript 함수를 작성해야 합니다.이 함수는 문자열에 포함된 각 알파벳을 주어진 숫자만큼 알파벳 순서상 뒤로 밀어 새로운 문자로 치환해야 합니다.여기서 중요한 조건은 이동 결과가 알파벳 범위를 벗어날 때 다시 처음이나 끝으로 순환(wrap around)되어야 한다는 점입니다. 예를 들어 z 다음에는 undefined 같은 빈 값이 아니라 a가 이어져야 하며, 반대로 a보다 앞으로 밀어야 할 때는 z로 연결됩니다. 이 방식은 고전 암호학에서 널리 알려진 시저 암
이번 글에서는 2차원 배열, 즉 반드시 정사각형 형태(n×n)를 이루는 행렬을 입력받아, 그 요소들을 나선형(spiral) 순서로 추출한 새로운 1차원 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같은 3×3 행렬이 주어졌다고 가정해 봅시다.const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];함수는 왼쪽 상단 모서리인 위치 (0, 0)에서 시작하여 시계 방향으로 안쪽을 향해 나선형으로 요소를 수집해야 합니다. 따라서 위 행렬에 대한 기대 출력은 다음과 같
문제 개요 숫자 하나(n)를 매개변수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 1부터 n 사이에 존재하는 모든 소수를 담은 배열을 반환해야 합니다. 에라토스테네스의 체란? 에라토스테네스의 체(Sieve of Eratosthenes)는 고대 그리스 수학자 에라토스테네스가 고안한 고전적인 알고리즘으로, 특정 범위 안의 모든 소수를 매우 효율적으로 찾을 수 있습니다. 기본 원리는 소수의 배수들을 차례대로 걸러 내면, 마지막에 남는 수들이 곧 소수라는 것입니다. 알고리즘 접근 방법 1단계: 불리언 배열 초기화 먼저 주어진
숫자 배열을 입력받아 병합 정렬(Merge Sort) 알고리즘으로 정렬하는 JavaScript 함수를 작성해 보겠습니다.병합 정렬이란?병합 정렬은 대표적인 분할 정복(Divide and Conquer) 알고리즘으로, 크게 두 가지 과정으로 구성됩니다.분할(재귀) 단계 — 배열을 요소가 하나만 남을 때까지 계속 반으로 나눕니다.병합(반복) 단계 — 나뉜 조각들을 올바른 순서대로 다시 합쳐 정렬된 배열을 만듭니다.이 알고리즘의 시간 복잡도는 최악의 경우에도 O(n log n)으로 안정적이며, 데이터가 어떻게 배치되어 있든 일관된 성능을
이번 글에서는 공백이 포함된 문자열을 입력받아 그 문자열 안에 몇 개의 공백이 있는지 세는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.예를 들어, 입력 문자열이 다음과 같다면 −const str = this is a string;출력 결과는 다음과 같아야 합니다 −const output = 4;구현 예제가장 기본적인 접근 방식은 문자열을 한 글자씩 순회하면서 각 문자가 공백( )인지 확인하고, 공백일 때마다 카운트를 증가시키는 것입니다. { let count = 0; for (let i
문제 개요JavaScript로 두 개의 인수를 받는 함수를 작성해야 합니다. 첫 번째 인수는 숫자 배열이며, 두 번째 인수는 목표가 되는 합계 값입니다.함수는 배열에서 요소들을 선택해 그 합이 두 번째 인수로 전달된 값과 정확히 일치하도록 만들어야 하고, 조건을 충족하는 모든 숫자 조합을 배열 형태로 반환해야 합니다.여기서 기억해야 할 두 가지 조건은 다음과 같습니다.조합 내 숫자의 순서는 중요하지 않습니다.필요하다면 같은 숫자를 여러 번 반복해서 사용할 수 있습니다.입력 예시입력 배열과 목표 합계가 다음과 같다고 가정해 보겠습니다
문제 소개다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.const arr = [1, 2, 3, 4, 5];앞쪽에서 요소를 하나씩 제거해 가면, 이 배열은 아래와 같이 단계별로 분리할 수 있습니다.[1, 2, 3, 4, 5][2, 3, 4, 5][3, 4, 5][4, 5][5][]우리가 작성해야 할 것은 이런 배열을 입력으로 받는 자바스크립트 함수입니다. 이 함수는 위에서 설명한 방식 그대로 배열을 분리한 뒤, 각 단계별 부분 배열의 합계를 담은 새로운 배열을 만들어 반환해야 합니다.따라서 앞서 예시로 든 배열에 대한 출력 결과는