이번 글에서는 알파벳으로 이루어진 문자열과 숫자 n을 입력받아, 각 문자를 n칸 뒤에 위치한 알파벳으로 바꾼 새로운 문자열을 반환하는 JavaScript 함수를 만들어 보겠습니다.예를 들어 입력값이 다음과 같다면,const str = abcd;const n = 2;출력 결과는 아래와 같아야 합니다.const output = cdef;동작 원리핵심 아이디어는 간단합니다.알파벳 전체(a~z)를 하나의 기준 문자열로 정의합니다.입력 문자열의 각 문자가 알파벳에서 몇 번째 위치인지 indexOf()로 확인합니다.해당 위치에 n을 더한 뒤,
문제 정의 실제 개발 환경에서는 다음과 같이 subList 배열 안에 또 다른 객체들이 중첩되어 있는, 여러 계층 구조를 가진 복잡한 JSON 객체를 자주 접하게 됩니다. const obj = { id: 0001, fieldName: sample1, fieldValue: 0001, subList: [ { id: 1001, fieldName: Sample Child 1, fieldValue: 1001, su
이 글에서는 리터럴 값으로 이루어진 배열을 받아, 그 요소들의 순서를 제자리(in-place)에서 무작위로 섞어주는 JavaScript 함수를 작성해 보겠습니다.여기서 제자리 섞기란 새로운 배열을 생성하지 않고 원본 배열 자체의 순서를 직접 변경한다는 의미입니다.구현 예제해당 기능을 구현한 코드는 다음과 같습니다.const letters = [a, b, c, d, e, f, g];const unorderArray = arr => { let i, pos, temp; f
JavaScript에서 숫자 하나를 매개변수로 받는 함수를 작성해야 한다고 가정해 봅시다. 이 함수는 1부터 입력값 num까지의 모든 자연수의 합을 반환해야 하며, 1과 num 자체도 합산에 포함되어야 합니다.예를 들어, num이 다음과 같다면 −const num = 5;함수의 출력 결과는 다음과 같아야 합니다 −const output = 15;그 이유는 다음과 같습니다 −1+2+3+4+5 = 15반복문 대신 수학 공식 사용하기이 문제는 for문이나 while문으로 1부터 num까지 차례대로 더하는
이번 글에서는 두 개의 숫자로 이루어진 배열을 첫 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 이 배열은 난수를 생성할 수 있는 숫자 범위를 지정합니다.두 번째 인수는 단일 숫자로, 생성해야 할 난수의 개수를 나타냅니다.마지막으로 함수는 생성된 모든 난수 중 가장 큰 값을 반환해야 합니다.문제 접근 방식구현 과정은 다음과 같이 정리할 수 있습니다.1단계: 범위 내 난수 생성 함수 만들기먼저 최솟값(min)과 최댓값(max)을 받아 해당 범위 사이의 임의의 실수를 반환하는 헬퍼 함수를 작성합니다. Math.rand
숫자로 이루어진 배열을 입력받아 그 안에서 최댓값(maximum value)이 위치한 인덱스를 반환하는 JavaScript 함수를 작성해 보겠습니다.여기서 주의할 점은 배열에 최댓값이 하나만 존재하는 것이 아니라, 동일한 최댓값이 여러 번 반복해서 나타날 수 있다는 것입니다. 따라서 함수는 최댓값에 해당하는 모든 인덱스를 배열(array) 형태로 반환해야 합니다.문제 해결 접근 방식이 문제는 다음 두 단계로 해결할 수 있습니다.1. Math.max()와 스프레드 연산자(...)를 사용해 배열 전체에서 최댓값을 구합니다.2. redu
수학자 스타니스와프 울람(Stanisław Ulam)은 임의의 양의 정수 n(n > 0)으로부터 다음과 같은 규칙에 따라 수열을 생성하는 방법을 제안했습니다.수열 생성 규칙n이 1이면 수열 생성을 종료합니다.n이 짝수이면, 다음 수는 n / 2 입니다.n이 홀수이면, 다음 수는 3 * n + 1 입니다.1에 도달할 때까지 위 과정을 계속 반복합니다.예시처음 몇 개의 정수에 대해 적용하면 다음과 같습니다.2 -> 13 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 14
문제 소개다음과 같은 부동소수점 숫자가 있다고 가정해 보겠습니다.2.74이 숫자를 4로 나누면 결과는 0.685입니다.그런데 실제 상황에서는 이 숫자를 4로 나누되, 각 몫을 소수점 둘째 자리까지만 표현해야 하는 경우가 많습니다. 예를 들어 금액을 여러 사람에게 분배할 때처럼 말입니다.즉, 원하는 결과는 다음과 같습니다.0.69씩 3번, 그리고 나머지 0.67검증해 보면 0.69 × 3 + 0.67 = 2.07 + 0.67 = 2.74로, 반올림 과정에서도 원래 값이 정확히 유지됩니다.해결 방법이 문제는 다음 단계로 해결할 수 있습
문제 개요JSON 객체를 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 JSON 객체는 문자열 키가 숫자 값에 매핑된 구조를 가지고 있습니다. 함수는 객체 내부를 순회하면서 가장 작은 값을 찾아 반환해야 합니다.예제 코드이 문제를 해결하는 코드는 다음과 같습니다. { return Math.min(acc, obj[val]); }, Infinity); return smallest; } console.log(findSmallestValue(obj));실행 결과콘솔에 출력되는 결과는 다음과
문제 상황다음과 같이 인덱스 키(0, 1, 2...)가 문자열 값에 매핑된 JSON 객체가 있다고 가정해 보겠습니다.const obj = { 0: Rakesh, 1: Dinesh, 2: Mohit, 3: Rajan, 4: Ashish };이러한 객체를 입력으로 받아, 객체의 값들을 활용해 하나의 배열을 만들어 반환하는 JavaScript 함수를 작성해야 합니다.해결 방법 1: Object.keys() 활용가장 기본적인 접근 방식은 Object.keys()로 객체의 모든 키를 가져온 뒤, 각 키에
이번 튜토리얼에서는 세 개의 인수를 받아 조건에 맞는 새로운 2차원 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.height → 배열의 행(row) 개수width → 배열의 열(column) 개수val → 배열의 각 요소에 채워질 초기값함수는 이 세 가지 기준에 따라 구성된 새로운 배열을 반환해야 합니다.예제 코드const rows = 4, cols = 5, val = Example;const fillArray = (width, height, value) => { con
문제 개요임의의 길이를 가진 숫자 배열을 입력받아, 배열에 포함된 모든 숫자의 최소공배수(LCM, Least Common Multiple)를 반환하는 JavaScript 함수를 작성해야 합니다.이 문제는 한 번에 해결하려 하면 복잡해지기 쉽습니다. 따라서 다음과 같이 세 단계로 나누어 접근하면 깔끔하고 효율적인 코드를 작성할 수 있습니다.1단계: 두 수의 최대공약수(GCD) 계산먼저 두 정수의 최대공약수(GCD, Greatest Common Divisor)를 구하는 헬퍼 함수를 만듭니다. 유클리드 호제법을 사용하면 재귀 호출만으로
문제 상황임의의 숫자가 주어졌을 때, 해당 숫자를 받아 인도 통화 형식으로 변환한 결과를 반환하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다.인도 통화 표기법은 일반적인 서양식 방식과 다릅니다. 서양에서는 세 자리마다 콤마를 찍지만, 인도에서는 맨 앞 세 자리 이후에는 두 자리씩 끊어서 콤마를 표시합니다. 예를 들어 129943은 1,29,943으로 표기됩니다.원하는 결과는 다음과 같습니다.toCurrency(1000) --> ₹1,000.00toCurrency(129943) --> ₹1,29,943.0
JavaScript를 다루다 보면 날짜 문자열을 포함한 객체 배열을 날짜 순서대로 정렬해야 하는 경우가 자주 발생합니다. 이번 글에서는 date 속성을 기준으로 배열을 정렬하는 방법을 알아보겠습니다.문제 상황예를 들어, 다음과 같이 날짜 정보를 담고 있는 객체 배열이 있다고 가정해 보겠습니다.const arr = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];여기서 우리가 작성해야 할 함수는 이 배열을 받아 각 객체의 date 속성 값을
JavaScript를 다루다 보면 아래와 같이 동일한 키가 여러 번 반복되는 객체 배열을 만나게 됩니다.const arr = [ {TR-01:1}, {TR-02:3}, {TR-01:3}, {TR-02:5}];이때 필요한 것은 이러한 배열을 입력받아 동일한 키를 가진 값들을 모두 더해 하나의 객체로 정리하는 함수입니다.즉, 최종 결과 배열은 다음과 같은 형태가 되어야 합니다.const output = [ {TR-01:4}, {TR-02:8}];구현 예제아래 코드는 반복문과 임시 맵(map) 객체를 활용해 중복 키의 값을 누적하고, 중
JavaScript에서는 숫자와 문자열이 섞여 있는 배열을 다루는 경우가 종종 있습니다. 예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.const arr = [1,2,3,4,5,4,12,2,6,7,4,3,2];이때 우리가 작성해야 할 함수는 이러한 배열을 입력받아, 숫자이거나 숫자로 완전히 또는 부분적으로 변환될 수 있는 요소들만 골라 그 평균값을 반환하는 것입니다.예를 들어 3454fdf 같은 문자열은 문제의 배열에 포함되어 있지 않지만, 만약 포함되어 있었다면 parseInt가 앞부분의 숫자만 추출하여 3454를 평균
개요JavaScript 개발에서 배열을 일정한 크기의 그룹(청크)으로 나누는 작업은 페이지네이션, 배치(batch) 처리 등 다양한 상황에서 유용하게 활용됩니다. 이번 글에서는 배열과 숫자를 인자로 받아, 배열(첫 번째 인자)을 길이가 n인 그룹들(두 번째 인자)로 분할한 뒤, 그 결과로 만들어진 2차원 배열을 반환하는 함수를 작성하는 방법을 알아보겠습니다.예를 들어 배열과 숫자가 다음과 같다면 −const arr = [a, b, c, d];const n = 2;출력 결과는 다음과 같아야 합니다 −const o
프로그래밍을 하다 보면 두 개의 범위 집합을 비교해야 하는 경우가 자주 있습니다. 하나는 임의의 길이를 가진 단일 범위(R1)이고, 다른 하나는 여러 개의 구간으로 이루어진 범위 집합(R2)입니다. 이때 R2에 속한 구간들 중 R1 내부에 완전히 또는 부분적으로 포함되는 부분의 길이를 모두 합산하는 것이 이번 글의 목표입니다. 문제 정의 먼저 다음과 같은 데이터가 주어졌다고 가정해 보겠습니다. const R1 = [20,40]; const R2 = [[14,22],[24,27],[31,35],[38,56]]; R2의 각 구간이 기준
다음과 같이 여러 사람의 이름이 담긴 배열이 있다고 가정해 보겠습니다.const arr = ['Amy','Dolly','Jason','Madison','Patricia'];우리가 작성해야 할 함수는 첫 번째 인수로 위와 같은 문자열 배열을 받고, 두 번째·세 번째 인수로 각각 소문자 알파벳 하나씩을 받습니다. 그런 다음 배열을 필터링하여, 첫 글자가 두 번째 인수부터 세 번째 인수까지의 알파벳 범위 안에 속하는 요소들만 남겨야 합니다.예를 들어 두 번째 인수가
이번 글에서는 문자열 배열을 입력받아 배열에 포함된 모든 모음(a, e, i, o, u)의 개수를 세는 JavaScript 함수를 작성해 보겠습니다. 배열의 각 요소는 한 글자일 수도 있고, 여러 글자로 이루어진 단어일 수도 있습니다.문제 접근 방식구현 방법은 간단합니다. 먼저 모음으로 판단할 기준 문자열 aeiou를 정의하고, 각 문자가 이 기준에 포함되는지 확인하는 함수를 만듭니다. 그다음 배열의 모든 요소를 순회하면서 각 문자열의 문자를 하나씩 검사하여 모음이면 카운트를 증가시키면 됩니다.예제 코드실제 코드를 살펴보겠습니다.