문제 소개이번 글에서는 두 개의 숫자, 예를 들어 a와 b를 입력받아 두 수 사이(경계값 포함)에 존재하는 소수의 총 개수를 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같습니다.a = 2, b = 21일 때,두 수 사이의 소수는 2, 3, 5, 7, 11, 13, 17, 19입니다.소수의 개수는 총 8개이므로, 우리가 만들 함수는 8을 반환해야 합니다.접근 방법이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.소수 판별: 주어진 숫자가 소수인지 확인하는 함수(isPrime)를 만듭니다.범위 순회: a
이 글에서는 숫자로 이루어진 대규모 배열을 합산할 때 ES6의 forEach()와 reduce() 함수가 각각 소요하는 시간을 비교해 보겠습니다.실제 환경에서 방대한 크기의 배열을 직접 다룰 수는 없기 때문에, 동일한 합산 연산을 매우 많은 횟수(반복)만큼 수행하는 방식으로 대규모 배열 처리 상황을 시뮬레이션합니다.예제 코드두 함수의 실행 시간을 측정하는 코드를 작성해 보겠습니다.const arr = [1, 4, 4, 54, 56, 54, 2, 23, 6, 54, 65, 65]; const reduceSum = arr => a
ASCII 코드란?ASCII(American Standard Code for Information Interchange)는 7비트 문자 인코딩 방식으로, 각 비트 조합이 고유한 문자 하나를 나타냅니다.영어 알파벳의 모든 문자는 각각 고유한 십진수 ASCII 코드 값을 가지고 있습니다. 예를 들어 대문자 A는 65, 소문자 a는 97에 해당합니다.이번 글에서는 두 개의 문자열을 입력받아 각 문자열의 ASCII 점수(문자열을 구성하는 모든 문자의 ASCII 십진수 값의 합)를 계산한 뒤, 두 점수의 차이를 반환하는 함수를 작성해 보겠습
문제 개요리터럴 값으로 구성된 중첩 배열을 인자로 받아, 배열 안에 있는 모든 값을 순서대로 연결해 하나의 문자열로 변환하는 JavaScript 함수를 작성해야 합니다.예를 들어 다음과 같은 중첩 배열이 있다고 가정해 보겠습니다.const arr = [ hello, [ world, how, [ are, you, [ without, me ] ] ] ];재귀 함수를 활용한 해결 방법배열의 중첩 깊이가 정해져 있지 않기 때문
동일선상의 점(Collinear Points)이란?세 개 이상의 점이 하나의 직선 위에 놓여 있을 때, 이 점들을 동일선상의 점(collinear points)이라고 부릅니다.세 점이 한 직선 위에 있는지 판단하는 기준은 간단합니다. 세 점으로 만들 수 있는 모든 선분 쌍의 기울기(slope)가 서로 같으면 됩니다.예를 들어 2차원 평면 위에 임의의 세 점 A, B, C가 있다고 가정해 봅시다. 다음 조건이 성립하면 세 점은 동일선상에 있습니다.slope of AB = slope of BC = slope of CA직선의 기울기 구하
이번 글에서는 양수와 음수가 섞여 있는 배열을 입력받아, 각 요소의 부호를 제자리에서 반전시키는 JavaScript 함수를 작성해 보겠습니다. 즉, 양수는 같은 크기의 음수로, 음수는 같은 크기의 양수로 변환하는 것입니다.접근 방법배열의 각 요소에 -1을 곱하면 부호가 반전됩니다. 이때 원본 배열 자체를 수정하는 제자리(in-place) 방식으로 처리할 수도 있고, 새로운 배열을 반환하는 방식으로 처리할 수도 있습니다.먼저 forEach()를 사용해 원본 배열을 직접 수정하는 방법을 살펴보겠습니다.예제 코드 { arr
프로닉 수(Pronic Number)란 두 개의 연속된 정수의 곱으로 표현되는 수를 말합니다. 즉, n(n + 1) 형태로 나타낼 수 있는 숫자입니다.예를 들어 12는 3 × 4 = 12, 90은 9 × 10 = 90이므로 둘 다 프로닉 수입니다. 대표적인 프로닉 수로는 0, 2, 6, 12, 20, 30, 42, 56, 72, 90 등이 있습니다.이번 글에서는 하나의 숫자를 입력받아 해당 숫자가 프로닉 수이면 true를, 아니면 false를 반환하는 자바스크립트 함수를 작성해 보겠습니다.구현 로직핵심 아이디어는 간단합니다. 프로닉
두 개의 숫자 배열이 있다고 가정해 보겠습니다.const arr1 = [12, 54, 2, 4, 6, 34, 3];const arr2 = [54, 2, 5, 12, 4, 1, 3, 34];위 배열을 살펴보면 6은 첫 번째 배열(arr1)에만 존재하고, 5와 1은 두 번째 배열(arr2)에만 존재합니다. 나머지 요소들은 두 배열 모두에 공통으로 포함되어 있습니다.이번 글에서는 이처럼 두 개의 배열을 인수로 받아, 양쪽 배열에 공통으로 존재하지 않는 요소들만 골라 새로운 배열로 반환하는 JavaScript 함수를 작성해 보겠습니다.구현
이번 글에서는 두 개의 문자열을 입력받아, 첫 번째 문자열이 두 번째 문자열 안에 몇 번 등장하는지 그 횟수를 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어, 다음과 같은 메인 문자열이 있다고 가정해 봅시다.const main = This is the is main is string;우리가 찾아야 할 대상 문자열은 다음과 같습니다.const sub = is;위 예제에서 is라는 문자열은 메인 문자열 안에 총 4번 등장합니다. 이제 이 기능을 수행하는 함수의 코드를 작성해 보겠습니다.구현 예제가장 간단하고 효율적인
중첩된 숫자 배열 안에 null, undefined, false 같은 거짓(falsy) 값과 문자열이 섞여 있는 경우가 있습니다. 이때 배열에 실제로 존재하는 숫자 값들만 곱한 결과를 반환하는 JavaScript 함수를 작성해야 합니다.특히 주의할 점은 배열에 0이 포함되어 있을 때입니다. 0을 그대로 곱하면 전체 결과가 0이 되어버리기 때문에, 0 역시 다른 거짓 값과 마찬가지로 무시하고 계산에서 제외해야 합니다.해결 방법핵심 아이디어는 재귀(recursion)를 활용하는 것입니다. 배열의 각 요소를 순회하면서 요소가 배열이면 자
이번 글에서는 배열을 입력받아 그중 두 번째로 자주 등장하는 요소를 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.const arr = [1, 34, 4, 3, 2, 1, 4, 6, 4, 6, 5, 3, 6, 6];위 배열에서 가장 많이 등장하는 요소는 다음과 같습니다.6하지만 우리가 원하는 결과는 두 번째로 자주 등장하는 요소, 즉 아래의 값입니다.4구현 로직함수의 동작 순서는 다음과 같습니다.1. reduce() 메서드와 Map 객체를 활용해 각 요소
문자열과 숫자 n을 입력받는 JavaScript 함수를 작성해야 합니다. 단, n은 문자열 전체 길이를 정확히 나눌 수 있는 값이어야 하며, 함수는 문자열을 n개의 동일한 부분으로 나눈 결과를 배열 형태로 반환해야 합니다.문제 접근 방법먼저 각 조각의 길이를 구해야 합니다. 문자열 전체 길이를 n으로 나누면 한 조각당 길이를 알 수 있습니다. 그다음 split() 메서드로 문자열을 개별 문자 배열로 변환한 뒤, reduce()를 활용해 문자를 하나씩 모으고 지정된 길이에 도달할 때마다 새로운 조각을 시작하는 방식으로 문제를 해결할
이번 포스팅에서는 두 개의 배열을 인자로 받아 각 위치에 해당하는 요소들을 하나씩 비교하고, 모든 요소가 완전히 일치하면 true, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.배열끼리 단순히 == 또는 === 연산자로 비교하면 참조값(메모리 주소)만 비교되기 때문에, 내용이 같아도 서로 다른 객체라면 false가 반환됩니다. 따라서 배열의 실제 내용을 비교하려면 직접 함수를 구현해야 합니다.구현 로직함수는 다음과 같은 순서로 동작합니다.1. 두 배열의 길이(length)를 먼저 비교하여 다르면
문제 소개숫자로 이루어진 배열을 인수로 받아, 최솟값과 최댓값을 제외한 나머지 요소들의 평균을 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같은 배열이 주어졌다고 가정해 봅시다.const arr = [1, 4, 5, 3, 5, 6, 12, 5, 65, 3, 2, 65, 9];이 배열에서 가장 큰 값(65)과 가장 작은 값(1)을 하나씩 제외한 뒤, 남은 요소들의 평균을 구하는 것이 목표입니다.풀이 접근 방식가장 효율적인 방법은 reduce() 메서드를 사용해 배열을 단 한 번만 순회하면서 세 가지 값을 동
이번 글에서는 재귀(recursion) 방식을 활용해 숫자 n의 팩토리얼(계승)을 계산하는 자바스크립트 함수를 작성해 보겠습니다.팩토리얼이란 양의 정수 n에 대해 1부터 n까지의 모든 정수를 곱한 값으로, 수식으로는 n! = n × (n-1) × (n-2) × ... × 1로 표현됩니다. 예를 들어 5!는 5 × 4 × 3 × 2 × 1 = 120입니다.재귀 기반 팩토리얼 함수 만들기재귀란 함수가 자기 자신을 다시 호출하는 프로그래밍 기법을 말합니다. 아래 코드에서는 사용자 정의 함수 recursiceFactorial()을 만들어
JavaScript에서 숫자 배열을 다루다 보면 연속된 음수들이 몇 개의 그룹으로 이루어져 있는지 계산해야 하는 경우가 있습니다. 이번 글에서는 reduce() 메서드를 활용해 이 문제를 간결하게 해결하는 방법을 알아보겠습니다.문제 상황다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];이 배열에서 연속된 음수들의 묶음(그룹)이 총 몇 개인지 세는 JavaScript 함수를 작성해야 합니다.위 배열을 살펴보면 다음과 같습니다.첫 번째 그룹: 인덱스 0부
JavaScript 개발을 하다 보면 두 배열의 객체를 비교해야 하는 상황이 자주 발생합니다. 이번 글에서는 한 배열의 모든 요소가 다른 배열에 존재하는지 확인하는 방법을 알아보겠습니다.문제 상황다음과 같이 두 개의 객체 배열이 있다고 가정해 보겠습니다.const blocks = [ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, ] const containers = [ { block: { id: 1 } }, { block: { id: 2 } }, {
이번 글에서는 하나의 숫자를 입력받아, 짝수 번째 자리(인덱스 0, 2, 4, ...)에 있는 숫자들의 합과 홀수 번째 자리(인덱스 1, 3, 5, ...)에 있는 숫자들의 합 사이의 차이를 반환하는 JavaScript 함수를 작성해 보겠습니다.문제 이해하기숫자를 오른쪽 끝 자릿수부터 0번 인덱스로 시작해 왼쪽 방향으로 하나씩 번호를 매깁니다. 그다음 짝수 인덱스 자릿수는 더하고, 홀수 인덱스 자릿수는 뺀 뒤, 최종 결과의 절댓값을 반환하면 됩니다.예를 들어 숫자가 345336이라면 다음과 같습니다.오른쪽부터 자릿수: 6, 3, 3
중복된 숫자가 포함된 배열이 주어졌을 때, 동일한 값들을 하나의 인덱스로 합쳐 합계를 계산하는 JavaScript 함수를 작성해야 합니다. 문제 이해하기 예를 들어 입력 배열이 다음과 같다면, const input = [1, 3, 1, 3, 5, 7, 5, 4]; 출력은 다음과 같아야 합니다. const output = [2, 6, 10, 7, 4]; 여기서 1은 두 번 등장하므로 2가 되고, 3 역시 두 번 등장하여 6, 5는 두 번 등장해 10이 됩니다. 반면 한 번만 등장한 7과 4는 원래 값 그대로 유지됩니다. 구현 방법 이
이번 글에서는 음수 정수를 입력받아 각 자릿수의 합을 반환하는 JavaScript 함수를 작성해 보겠습니다. 여기서 핵심은 첫 번째 자릿수를 음수로 취급하고, 나머지 자릿수는 양수로 더한다는 점입니다.예를 들어 다음과 같습니다.-234 → -2 + 3 + 4 = 5-54 → -5 + 4 = -1즉, 마이너스 기호가 붙은 맨 앞 자릿수만 음수로 계산하고, 그 뒤의 자릿수들은 일반적인 양수처럼 더해주면 됩니다.접근 방법구현 순서는 다음과 같습니다.1. 숫자를 String()으로 문자열로 변환합니다.2. split() 메서드로 한 글자씩