문제 상황다음과 같이 감성 분석 관련 데이터를 담고 있는 두 개의 객체가 있다고 가정해 보겠습니다.const obj1 = { positive: [happy, excited, joyful], negative: [depressed, sad, unhappy] }; const obj2 = { happy: 6, excited: 1, unhappy: 3 };여기서 obj1은 긍정(positive)과 부정(negative) 카테고리별 단어 목록을 담고 있으며, obj2는 각 단어에 대응하는 점수를 담고 있습니
문제 상황두 개의 숫자 배열이 있고, 각 배열이 하나의 범위(range)를 나타낸다고 가정해 보겠습니다.const arr1 = [2, 5];const arr2 = [4, 7];여기서 우리는 이러한 두 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 함수는 입력된 두 범위가 겹치는 구간, 즉 교집합에 해당하는 새로운 범위 배열을 생성한 뒤 이를 반환해야 합니다.따라서 위 입력값에 대한 출력 결과는 다음과 같습니다.const output = [4, 5];교집합 계산 원리두 범위 [a1, b1]과 [a2, b2]의 교집합
반복되는 값을 포함하는 리터럴 배열을 입력받아, 그중 가장 자주 등장하는 요소(최빈값)를 반환하는 JavaScript 함수를 작성해야 합니다.만약 두 개 이상의 요소가 동일한 최대 횟수로 나타난다면, 해당 요소들을 모두 배열에 담아 함께 반환해야 합니다.동작 원리이 함수는 다음과 같은 단계로 동작합니다.1. 빈 객체(count)를 만들고, forEach로 배열을 순회하며 각 요소가 등장한 횟수를 기록합니다.2. Object.keys()로 요소 목록을 가져온 뒤, reduce를 사용해 최대 빈도를 가진 요소(들)를 추출합니다.3. 현
문제 이해하기숫자들이 나열되어 있을 때, 숫자 사이에 적절한 연산자(+, -, *, /, ^, %)와 등호(=)를 넣어 성립하는 등식을 완성하는 JavaScript 함수를 작성해야 합니다.예를 들어 다음과 같습니다.입력 : 5 3 8 출력 : 5+3=8 입력 : 9 27 3 출력 : 9=27/3 입력 : 5 2 25 , 1 5 2 출력 : 5^2=25 , 1=5%2모든 입력에는 최소 한 가지 이상의 올바른 조합이 반드시 존재하며, 함수는 그중 하나만이라도 정확하게 성립하는 식을 반환하면 됩니다.풀
이번 글에서는 숫자를 입력받아 해당 숫자가 자기 분할 숫자(self-dividing number)인지 판별하는 자바스크립트 함수를 작성해 보겠습니다. 자기 분할 숫자란 무엇일까요? 자기 분할 숫자란 자신을 구성하는 모든 자릿수로 나누어 떨어지는 수를 의미합니다. 자기 분할 숫자라면 이 숫자는 자기 분할 숫자입니다를, 그렇지 않다면 이 숫자는 자기 분할 숫자가 아닙니다를 출력해야 합니다. 예시로 이해하기 128은 자기 분할 숫자입니다. 각 자릿수인 1, 2, 8이 모두 128을 나누어 떨어뜨릴 수 있기 때문입니다. 102는 자기
이번 글에서는 하나의 숫자를 입력받아 해당 숫자가 회문 숫자인지 아닌지를 판별하는 JavaScript 함수를 작성해 보겠습니다.회문 숫자란 무엇일까요?회문 숫자(팰린드롬 숫자)는 왼쪽에서 읽어도 오른쪽에서 읽어도 동일한 숫자를 의미합니다. 즉, 숫자의 앞뒤가 대칭을 이루는 경우입니다.예시343 → 왼쪽에서 읽어도, 오른쪽에서 읽어도 343이므로 회문 숫자입니다.6789876 → 좌우 대칭 구조이므로 회문 숫자입니다.456764 → 뒤집으면 467654로 다르므로 회문 숫자가 아닙니다.구현 코드아래 코드는 문자열 변환 없이 수학적 연
배열의 차수(degree)란 배열을 이루는 요소 중 가장 많이 등장하는 요소의 빈도수, 즉 최대 출현 횟수로 정의됩니다.예를 들어 다음 배열을 살펴보겠습니다.const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];이 배열에서 숫자 3은 총 4번 등장하므로, 해당 배열의 차수는 4가 됩니다.문제 정의리터럴 값으로 구성된 배열을 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수의 목표는 전체 배열과 동일한 차수를 가지면서 길이가 가장 짧은 연속 부분 배열(subarray)의 길이를 반환하는 것입니다.접
이번 문제에서는 숫자 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.함수는 배열 내에서 요소들이 엄격하게 증가(strictly increasing)하는 순서로만 이루어진 가장 긴 연속 하위 배열의 길이를 반환해야 합니다.여기서 엄격하게 증가하는 수열이란, 어떤 요소든 그 앞에 있는 모든 요소보다 항상 커야 하는 경우를 의미합니다. 즉, 같은 값이 반복되어도 안 되며 매번 이전 값보다 반드시 커야 합니다.예시예를 들어 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.const arr = [5, 7,
두 개의 배열이 있다고 가정해 보겠습니다. 각각 arr1과 arr2라고 부르겠습니다. 여기서 arr2의 요소들은 서로 중복되지 않으며, arr2의 모든 요소는 arr1에도 포함되어 있습니다.우리는 이러한 두 배열을 입력받아 arr1의 요소들을 정렬하는 JavaScript 함수를 작성해야 합니다. 정렬 조건은 다음과 같습니다.arr1 내 요소들의 상대적 순서가 arr2와 동일해야 합니다.arr2에 나타나지 않는 요소들은 arr1의 끝부분에 오름차순으로 배치해야 합니다.예를 들어, 입력 배열이 다음과 같다면 −const ar
데이터베이스에서 조회한 평면(flat) 구조의 레코드 배열은 각 행이 parentId 값으로만 관계를 표현하기 때문에, 화면에 렌더링하거나 트리 컴포넌트에 전달하려면 계층형 JSON 구조로 변환하는 과정이 필요합니다. 이 글에서는 id와 parentId만 있는 객체 배열을 부모-자식 관계가 반영된 트리 구조로 바꾸는 JavaScript 함수를 소개합니다. 문제 정의 다음과 같이 각 객체가 id, name, parentId 세 가지 속성을 가진 배열이 있다고 가정해 보겠습니다. const arr = [ { id: 7, n
이번 글에서는 첫 번째 인자로 숫자 배열을, 두 번째 인자로 목표 합계(target sum)를 받는 JavaScript 함수를 작성해 보겠습니다.이 함수의 역할은 원본 배열에서 가져온 요소들의 합이 정확히 목표 합계가 되는 모든 하위 배열(subarray)을 찾아 배열 형태로 반환하는 것입니다. 특별한 점은 같은 숫자를 여러 번 반복해서 사용할 수 있다는 조건입니다.문제 이해하기예를 들어 입력 배열과 목표 합계가 다음과 같다고 가정해 보겠습니다.const arr = [1, 2, 4];const sum = 4;그렇다면 기대되는 출력
JavaScript를 사용하다 보면 기존 객체 배열의 데이터 구조를 다른 형태로 변환해야 하는 경우가 자주 발생합니다. 이번 글에서는 사용자별 좋아요 정보가 담긴 객체 배열을 받아, 각 사용자 이름을 키(key)로 하고 좋아요 여부를 값(value)으로 하는 새로운 객체 배열을 만드는 방법을 알아보겠습니다.문제 상황예를 들어, 다음과 같이 여러 사용자의 좋아요 정보와 나이가 포함된 객체 배열이 있다고 가정해 보겠습니다.const arr = [ {user:dan,liked:yes,age:22}, {user:sarah,l
정수 배열을 입력받아 해당 원소들로 만들 수 있는 모든 순열(permutation)을 배열 형태로 반환하는 함수를 작성해 보겠습니다.정수 배열을 인수로 받습니다 (예: [1, 2, 3, 4])[1, 2, 3, 4]의 원소로 만들 수 있는 모든 순열을 담은 배열을 생성합니다각 순열의 길이는 원본 배열의 길이(여기서는 4)와 동일해야 합니다접근 방식: 백트래킹이 문제는 백트래킹(backtracking) 기법으로 깔끔하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.배열에서 원소를 하나씩 꺼내(splice) 임시 배열(used)
이번 글에서 다룰 문제는 백트래킹(Backtracking) 기법을 활용하는 대표적인 그리드 탐색 문제입니다. 2차원 격자(grid)에는 다음과 같은 네 가지 종류의 칸이 존재합니다.1 : 시작 칸(starting square) — 격자에 정확히 하나만 존재합니다.2 : 도착 칸(ending square) — 마찬가지로 정확히 하나만 존재합니다.0 : 지나갈 수 있는 빈 칸(empty square)-1 : 지나갈 수 없는 장애물(obstacle)우리가 작성해야 할 함수는 시작 칸에서 도착 칸까지 이동하면서, 장애물이 아닌 모든 칸을
개요 문자열 배열을 인수로 받아, 배열에 포함된 요소들로 만들 수 있는 모든 조합(순열)을 생성해 반환하는 JavaScript 함수를 작성해 보겠습니다. 예를 들어 [a, b, c, d]라는 배열이 주어지면, 길이가 4인 순열부터 길이가 1인 경우까지 가능한 모든 문자열 조합을 결과로 얻어야 합니다. 접근 방식 이 문제는 재귀 호출과 백트래킹(backtracking) 기법으로 해결하는 것이 가장 효율적입니다. 핵심 아이디어는 다음과 같습니다. 각 재귀 단계에서 아직 사용되지 않은 요소를 하나씩 선택합니다. 선택한 요소는 불리언(
문제 상황JavaScript를 다루다 보면 중첩 배열(배열의 배열)에서 첫 번째 요소가 중복되는 하위 배열을 하나로 합치고, 특정 숫자 값을 누적해야 하는 경우가 종종 있습니다.예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.const arr = [[12345, product, 10],[12345, product, 15],[1234567, other, 10]];모든 하위 배열은 정확히 세 개의 요소, 즉 ID, 이름, 수량을 가지고 있습니다. 여기서 우리가 작성해야 할 함수는 다음과 같은 동작을 수행해야 합니다.첫 번째 요소
JavaScript에서는 Array.prototype 객체에 직접 함수를 추가하여 배열의 기능을 확장할 수 있습니다. 이번 글에서는 시작 인덱스와 끝 인덱스를 인자로 받아, 해당 범위에 속한 모든 요소(시작과 끝 인덱스 포함)의 합을 계산하는 배열 함수를 만들어 보겠습니다.구현 예제const arr = [1, 2, 3, 4, 5, 6, 7];const sumRange = function(start = 0, end = this.length - 1){ // 시작 인덱스가 끝 인덱스보다 크면 유효한 범위가
크기가 n인 배열이 주어졌을 때, 과반수 요소(Majority Element)를 찾아야 하는 문제가 있습니다. 과반수 요소란 배열 전체 길이의 절반인 n/2번보다 더 많이 등장하는 요소를 의미합니다.해결 방법가장 효율적인 접근 방식은 해시 객체(맵)를 활용해 각 요소의 등장 횟수를 기록하는 것입니다. 요소를 하나씩 순회하면서 개수를 세고, 그 개수가 n/2(내림 처리)를 초과하는 순간 해당 요소를 즉시 반환하면 됩니다. 이렇게 하면 조기 반환(early return)이 가능해 불필요한 순회를 줄일 수 있습니다.예제 코드const a
JavaScript 개발을 하다 보면 문자열 배열의 각 요소를 키(key)와 값(value)으로 분리하여 객체(object)로 만들어야 하는 경우가 자주 발생합니다. 예를 들어 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.const arr = [ type=A, day=45 ];이번 글에서는 이러한 배열을 입력받아 객체로 변환하는 JavaScript 함수를 작성해 보겠습니다. 변환된 객체에는 배열의 각 문자열이 하나의 키/값 쌍으로 담겨야 합니다.변환 규칙규칙은 매우 간단합니다. 각 문자열에서 등호(=)를 기준으로 앞부분은 키
이번 글에서는 중복된 값이 포함될 수 있는 리터럴 배열을 입력받아, 가장 적은 횟수로 반복 등장한 모든 요소를 배열 형태로 반환하는 자바스크립트 함수를 작성해 보겠습니다.예를 들어, 입력 배열이 다음과 같다고 가정해 봅시다.const arr = [1,1,2,2,3,3,3];이때 기대하는 출력 결과는 다음과 같습니다.const output = [1, 2];그 이유는 1과 2가 각각 2번씩만 등장하여 가장 적은 중복 횟수를 가지기 때문입니다. 반면 3은 3번 등장하므로 결과에서 제외됩니다.구현 예제const arr = [1,1,2,2,