이번 글에서는 JavaScript에서 배열의 빈 자리를 0으로 동적으로 채우는 알고리즘을 살펴보겠습니다. 이 문제는 월(month) 데이터를 다룰 때 자주 마주치는 상황으로, 실무에서도 유용하게 활용할 수 있습니다.문제 정의1부터 12 사이의 숫자(양 끝값 포함)로 이루어진 months 배열이 주어집니다. 이 배열은 12개보다 적은 요소를 가질 수 있습니다. 우리가 해야 할 일은 이 배열을 받아서 항상 12개의 요소를 가진 완전한 월 배열을 만드는 것입니다. 원본 배열에 해당 월이 존재하면 그 값을 그대로 사용하고, 존재하지 않으면
숫자로 이루어진 배열과 하나의 숫자가 주어졌을 때, 두 번째 인자로 전달된 값과 합이 일치하는 모든 부분 배열(subarray)을 담은 배열을 반환하는 함수를 작성하는 것이 이번 글의 목표입니다.예를 들어 다음과 같습니다.const arr = [23, 5, 1, 34, 12, 67, 9, 31, 6, 7, 27]; const sum = 40; console.log(requiredSum(arr, sum));위 코드는 아래와 같은 배열을 출력해야 합니다.[ [ 5, 1, 34 ], [ 9, 31 ], [ 6, 7, 27 ] ]이 세 개
숫자로 이루어진 배열과 하나의 숫자를 입력받아, 배열 안에 존재하는 값 중 그 숫자에 가장 가까운 값을 반환하는 함수를 작성해야 한다고 가정해 봅시다.예를 들면 다음과 같습니다.closest([45,61,53,98,54,12,69,21], 67); // 69 closest([45,61,53,98,54,12,69,21], 64); // 61그럼 이 기능을 구현하는 코드를 작성해 보겠습니다.접근 방식: Array.prototype.reduce() 활용이 문제는 Array.prototype.reduce() 메서드를 사용하면 간결하게 해결
두 개의 객체가 있고, 대부분의 키-값 쌍은 서로 동일하지만 하나 이상의 키에서만 값이 다르다고 가정해 보겠습니다. 이번 글에서는 두 객체를 인수로 받아 값이 다른 첫 번째 키를 반환하는 함수를 작성해 보겠습니다. 만약 모든 키의 값이 완전히 동일하다면 함수는 -1을 반환해야 합니다. 예시 객체 먼저 비교에 사용할 두 개의 샘플 객체입니다. 잘 살펴보면 salary 속성의 값만 서로 다르고 나머지 속성은 모두 같습니다. const obj1 = { name: Rahul Sharma, id: 12342fe4554ggf, i
이번 글에서는 1부터 26 사이의 숫자(양 끝값 포함)를 입력받아 해당 숫자에 대응하는 영어 알파벳 대문자를 반환하는 함수를 작성해 보겠습니다. 만약 입력된 숫자가 이 범위를 벗어난다면 -1을 반환하도록 처리합니다.예를 들어 다음과 같이 동작합니다.toAlpha(3) = C toAlpha(18) = R즉, 숫자 1은 A에, 26은 Z에 각각 대응됩니다.ASCII 코드란?ASCII 코드는 키보드에 존재하는 모든 문자와 숫자를 표준화된 숫자 값으로 매핑한 체계입니다. 알파벳 대소문자, 숫자, 특수 문자까지 모두 고유한 코드 값을 가지고
이번 글에서는 배열을 입력받아 중복된 값을 모두 제거한 새로운 배열을 반환하는 함수를 작성해 보겠습니다.여기서 중요한 점은 단순히 중복을 하나만 남기는 것이 아니라, 원본 배열에서 두 번 이상 등장한 값은 새 배열에 아예 포함되지 않아야 한다는 것입니다.예를 들어 입력 배열이 다음과 같다면,const arr = [23, 545, 43, 232, 32, 43, 23, 43];출력 결과는 다음과 같아야 합니다.const output = [545, 232, 32];indexOf()와 lastIndexOf()의 차이 이해하기Array.pr
자바스크립트로 개발하다 보면 각 요소에 하이픈(-)이 포함된 문자열 배열을 다루는 경우가 있습니다. 이때 하이픈의 왼쪽은 키(key), 오른쪽은 값(value)이 됩니다. 우리가 해야 할 작업은 이 문자열들을 분할(split)하여 하나의 객체(object)로 만드는 것입니다.예제 배열다음과 같은 샘플 배열이 있다고 가정해 보겠습니다.const arr = [name-Rakesh, age-23, city-New Delhi, jobType-remote, language-English];구현 방법배열을 순회하면서 각 문자열을 split(-
두 개의 배열을 입력받아 첫 번째 배열과 두 번째 배열의 값이 번갈아 교차되어 배치된 새로운 배열을 반환하는 함수를 작성해야 한다고 가정해 보겠습니다.이 문제는 두 배열을 동시에 순회하면서 각 배열에서 값을 하나씩 번갈아 가져와 새로운 배열에 순서대로 추가하는 방식으로 해결할 수 있습니다. while 루프와 두 개의 인덱스 변수를 활용하면 간단하게 구현할 수 있습니다.예제 코드const arr1 = [34, 21, 2, 56, 17]; const arr2 = [12, 86, 1, 54, 28]; let run = 0, first =
이 글에서는 숫자로 이루어진 배열을 입력받아, 그중 가장 큰 값과 가장 작은 값의 차이를 반환하는 함수를 작성하는 방법을 알아보겠습니다.문제 접근 방식배열을 한 번씩 순회하면서 Math.min()과 Math.max() 메서드를 사용해 최솟값과 최댓값을 갱신한 뒤, 마지막에 두 값의 차이를 반환하면 됩니다.먼저 예제로 사용할 배열을 생성합니다.const arr = [23, 54, 65, 76, 87, 87, 431, -6, 22, 4, -454];구현 코드배열의 첫 번째 요소로 최솟값과 최댓값을 초기화하고, 이후 요소들을 순회하며 값
처음 n개의 자연수가 담긴 숫자 배열이 있다고 가정해 봅시다. 그런데 이 배열에는 한 요소가 두 번 등장하기 때문에 전체 요소 개수는 n+1개입니다. 우리의 목표는 배열을 입력받아 두 번 나타나는 숫자를 선형 시간(O(n)) 안에 찾아 반환하는 함수를 작성하는 것입니다.방법 1: Array.prototype.reduce() 활용하기다소 까다로워 보이는 접근 방식이지만, 코드가 가장 간결하다는 큰 장점이 있습니다. 먼저 코드부터 살펴보겠습니다. val + acc - (ind + 1)) + a.length - 1; console.log
개요한 주 7일 동안의 습도 데이터를 담고 있는 객체 배열이 있다고 가정해 보겠습니다. 그런데 이 데이터는 현재 배열 안에 무작위로 섞여 있습니다. 우리는 이 객체 배열을 요일 순서대로 정렬해야 합니다. 즉, 월요일(Monday) 데이터가 가장 먼저 오고, 그다음 화요일(Tuesday), 수요일(Wednesday) 순으로 이어져 마지막에 일요일(Sunday)이 오도록 말입니다.다음은 정렬 대상이 되는 배열입니다.const weather = [{ day: Wednesday,  
문자열을 다루다 보면 허용된 문자만 남기고 나머지는 모두 다른 문자로 가려야 하는 경우가 종종 있습니다. 예를 들어 모음만 남기고 자음은 별표(*)로 치환하거나, 화면에 표시할 수 없는 문자를 숨기는 작업 등이 대표적입니다. 이번 글에서는 이런 요구 사항을 해결하는 replaceChar 함수를 직접 구현해 보겠습니다.요구 사항 정의먼저 함수의 형태부터 정리해 보겠습니다.replaceChar(str, arr, [char])이 함수는 문자열 str에서 배열 arr에 포함되어 있지 않은 모든 문자를 세 번째 인자 char로 교체합니다.
배열 안에 여러 개의 하위 배열이 있고, 각 하위 배열에는 숫자와 함께 undefined나 null 값이 섞여 있다고 가정해 보겠습니다. 이때 각 하위 배열 요소들의 합계를 새로운 배열의 요소로 만들어야 하며, undefined와 null은 0으로 취급해서 계산해야 합니다.예제 데이터다음은 문제에서 사용할 샘플 배열입니다.const arr = [ [12, 56, undefined, 5], [undefined, 87, 2, null], [3, 6, 32, 1], [undefined, null] ];풀이 코드forEach
JavaScript에서 숫자와 문자열이 섞여 있는 배열을 다루다 보면, 숫자는 오름차순으로 먼저 정렬하고 그 뒤에 문자열을 알파벳 순서로 정렬해야 하는 경우가 있습니다. 이번 글에서는 Array.prototype.sort() 메서드와 사용자 정의 비교 함수를 활용해 이러한 자연 정렬(natural sort)을 구현하는 방법을 살펴보겠습니다. 문제 정의 다음과 같은 배열이 있다고 가정해 보겠습니다. const arr = [1, fdf, afv, 6, 47, 7, svd, bdf, 9]; 이 배열을 정렬하면 아래와 같은 결과가 나와야
문자열을 일정 길이 기준으로 나누어야 하는 상황은 실무에서 자주 발생합니다. 예를 들어 콘솔 출력을 정렬하거나, 고정 폭 레이아웃에 텍스트를 맞춰야 할 때가 그렇습니다. 이번 글에서는 두 개의 인자를 받는 breakString() 함수를 작성해 보겠습니다.함수의 요구 사항첫 번째 인자는 분할할 문자열이고, 두 번째 인자는 임계값(threshold)입니다. 문자열을 순회하다가 임계값 이상의 글자 수가 경과한 상태에서 공백을 만나면, 해당 공백을 줄 바꿈 문자(\n)로 대체하는 것이 핵심 로직입니다.사용 예시예를 들어 다음 코드는 줄
숫자나 문자열로 이루어진 배열에 중복된 값이 포함되어 있을 때, 각 요소가 몇 번 등장하는지 그 빈도를 구해야 하는 경우가 자주 있습니다. 이럴 때 가장 깔끔한 해결책은 요소를 키(key)로, 빈도를 값(value)으로 가지는 객체를 반환하는 것입니다.구현 방법은 간단합니다. 먼저 forEach() 루프로 배열을 순회하면서, 해당 요소가 이미 객체에 존재하면 카운트를 1씩 증가시키고, 존재하지 않으면 새로운 속성을 만들어 값을 1로 초기화합니다.마지막으로 완성된 객체를 반환하면 됩니다.예제 코드 { if(map[ite
JavaScript에서 문자열을 다루다 보면 인덱스 위치에 따라 각 문자의 대소문자를 다르게 변환해야 하는 경우가 있습니다. 이번 글에서는 짝수 인덱스의 문자는 소문자로, 홀수 인덱스의 문자는 대문자로 변환하여 새로운 문자열을 반환하는 함수를 작성해 보겠습니다.구현 아이디어핵심 로직은 다음과 같습니다.문자열을 한 글자씩 분리(split)하여 배열로 만든다.map() 메서드로 각 문자를 순회하면서 인덱스가 짝수인지 홀수인지 판별한다.짝수 인덱스면 toLowerCase(), 홀수 인덱스면 toUpperCase()를 적용한다.마지막으로
JavaScript를 다루다 보면 객체 배열 안에 있는 데이터를 특정 속성 값을 기준으로 묶어야 하는 경우가 자주 발생합니다. 예를 들어 여러 자동차 정보가 담긴 배열이 있다고 가정해 봅시다.문제 상황다음과 같이 자동차 제조사(company)와 차종(type) 정보를 담은 객체 배열이 있습니다.const cars = [{ company: Honda, type: SUV }, { company: Hyundai, type: Sedan }, { company: Suzuki, type: Sedan
실제 개발을 하다 보면 객체 안에 또 다른 객체가 속성 값으로 들어 있는 경우가 많습니다. 이런 중첩 구조는 2~3단계는 물론 그 이상 깊어지기도 합니다.예시 데이터다음은 사람 정보를 담고 있는 샘플 객체입니다. 각 사람의 이름 아래에 fullName과 details 객체가 중첩되어 있습니다.const people = { Ram: { fullName: Ram Kumar, details: { age: 31, isEmployed: true }
문제 소개parentArray라는 배열이 있다고 가정해 보겠습니다. 이 배열은 크기가 모두 동일한 여러 개의 하위 배열(subarray)을 포함하고 있으며, 각 하위 배열은 key와 value라는 두 가지 속성을 가진 객체들의 목록입니다.하나의 하위 배열 안에서는 두 객체가 동일한 key를 가질 수 없습니다. 반면, 모든 하위 배열은 서로 동일한 n개의 키 쌍(n은 하위 배열의 크기)을 공유합니다.우리가 해결해야 할 과제는 다음과 같습니다. 각 key를 기준으로, 해당 키에 연관된 모든 value들을 하나의 배열로 모아 새로운 객체