문제 이해하기숫자 n을 첫 번째이자 유일한 인수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 2부터 n까지 범위 안에 있는 모든 소수(prime number)의 개수를 반환해야 합니다.예를 들어 다음과 같습니다.n = 10일 때, 출력 결과: 4 (2, 3, 5, 7) n = 1일 때, 출력 결과: 0풀이 방법: 에라토스테네스의 체이 문제는 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘을 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.2부터 n-1까지의 숫자를 일단 모두
두 문자열 str1과 str2는 str1의 각 문자를 다른 문자로 치환했을 때 str2가 되는 경우, 동형(isomorphic) 문자열이라고 합니다.예를 들어 다음과 같은 두 문자열을 살펴보겠습니다.const str1 = abcde; const str2 = eabdc;str1의 a→e, b→a, c→b, d→d, e→c처럼 일관된 규칙으로 치환하면 str2를 만들 수 있으므로, 이 두 문자열은 동형 관계입니다.문제 요구 사항두 개의 문자열을 인수로 받아, 이 문자열들이 서로 동형인지 아닌지를 판별하는 자바스크립트 함수를 작성해야 합
숫자를 입력받아 각 자릿수를 반복해서 더하고, 최종적으로 한 자리 숫자에 도달할 때까지 이 과정을 반복하는 JavaScript 함수를 작성하는 것이 목표입니다. 예를 들어 123456의 경우 1+2+3+4+5+6 = 21이 되고, 다시 2+1 = 3으로 수렴하게 됩니다.이 문제는 아래의 두 가지 방법으로 해결할 수 있습니다.방법 1: while 반복문 사용이 방식은 while 반복문을 활용해 숫자의 각 자릿수를 계속 더하는 접근 방식입니다. 내부 반복문은 현재 숫자의 모든 자릿수를 하나씩 더하고, 외부 반복문은 그 결과가 한 자리
이번 글에서는 숫자 하나를 유일한 인수로 받아, 해당 숫자가 3의 거듭제곱인지 판별하는 자바스크립트 함수를 작성해 보겠습니다.입력값이 3의 거듭제곱이면 true를, 그렇지 않으면 false를 반환하면 됩니다.동작 예시isPowerOf3(243) = trueisPowerOf3(343) = falseisPowerOf3(81) = true구현 코드가장 직관적인 접근 방식은 1 또는 3부터 시작해 3을 계속 곱해 가면서 입력값에 정확히 도달하는지 확인하는 것입니다. 도달했다면 그 수는 3의 거듭제곱입니다.const num = 243;var
두 개의 정렬된 배열(오름차순)이 다음과 같이 주어져 있다고 가정해 보겠습니다.const arr1 = [1, 2, 3, 0, 0, 0]; const arr2 = [2, 5, 6];여기서 첫 번째 배열 끝의 0은 두 번째 배열의 요소가 들어갈 자리를 미리 확보해 둔 빈 공간입니다. 우리는 이렇게 주어진 두 배열을 받아 모든 요소를 정렬된 상태로 담고 있는 새로운 배열을 반환하는 JavaScript 함수를 작성해야 합니다.따라서 위 배열에 대한 기대 출력은 다음과 같습니다.const output = [1, 2, 2, 3, 5, 6];방
두 개의 이진수(binary) 문자열을 입력받아, 두 수의 합을 다시 이진 문자열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같은 두 문자열이 주어졌다고 가정해 봅시다.const str1 = 1010; const str2 = 1011;이 경우 기대되는 출력 결과는 다음과 같습니다.const output = 10101;접근 방식사람이 손으로 이진수 덧셈을 하는 방식과 동일하게 접근합니다. 가장 오른쪽(최하위 비트)부터 한 자리씩 더해 나가며, 합이 2 이상이 되면 올림수(carry)를 발생시켜 다음
시작 시간과 종료 시간을 담고 있는 구간(interval) 객체의 배열이 주어졌을 때, 그중 서로 겹치는 시간대가 있는지 확인하는 자바스크립트 함수를 작성해 보겠습니다. 입력 데이터는 다음과 같은 형태입니다. const arr = [ { start: 01:00, end: 04:00 }, { start: 05:00, end: 08:00 }, { start: 07:00, end: 11:00 }, { start: 09:30, end: 18:00 }, ]; 문제 요건 함수는 이 객체 배열을 순회하면서 각 요소를 나머지 요소들
JavaScript 개발을 하다 보면 객체 배열을 미리 정의된 순서에 따라 정렬해야 하는 경우가 종종 있습니다. 대표적인 예로, 주문 목록을 상태별 우선순위 순서대로 나열해야 하는데, 그 우선순위가 별도의 문자열 배열에 담겨 있는 경우를 들 수 있습니다.문제 상황다음과 같이 객체 배열과 문자열 배열이 있다고 가정해 보겠습니다.const orders = [ { status: "pending" }, { status: "rec
문자열로 이루어진 두 개의 배열이 있다고 가정해 보겠습니다. 첫 번째 배열에는 한 해의 각 월을 나타내는 문자열이 정확히 12개 들어 있습니다. const year = [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]; 두 번째 배열에는 문자열 두 개만 들어 있으며, 찾고자 하는 월의 범위를 나타냅니다. const monthsRange = [aug, oct]; 이제 이 두 배열을 인수로 받아, 첫 번째 배열에서 두 번째 배열이 지정한 범위에 해당하는 모든 월을 골라내는 자바
문제 상황다음과 같이 배열 안에 여러 개의 배열이 들어 있는 2차원 배열이 있다고 가정해 보겠습니다.const arr = [ [1,0], [0,1], [0,0] ];우리는 첫 번째 인수로 이러한 2차원 배열을 받고, 두 번째 인수로 정확히 두 개의 숫자로 이루어진 배열을 받는 JavaScript 함수를 작성해야 합니다.이 함수의 역할은 두 번째 입력으로 주어진 배열이 원본 배열 안에 존재하는지 여부를 확인하는 것입니다. 만약 존재한다면 해당 하위 배열의 인덱스를 반환하고, 존재하지 않는다면 -1을 반환하도록 구현할 수 있
문제 정의배열마다 동일한 문자가 여러 번 등장하는 두 개의 단일 문자(single character) 배열을 비교하고, 그 차이를 구해야 하는 경우가 있습니다.예를 들어 다음과 같은 두 배열이 있다고 가정해 보겠습니다.const arr1 = ['A', 'C', 'A', 'D'];const arr2 = ['F', 'A', 'T', 'T'];여기서는 같은 위치(인덱스)에 있는 문자끼리 하나씩 비교한 뒤, 서로 다른 문자만
실무에서는 숫자만 있는 문자열과 알파벳·숫자가 조합된 문자열이 하나의 배열에 섞여 있는 경우를 종종 마주하게 됩니다. 이런 배열을 단순히 sort() 메서드로 정렬하면 사전순(lexicographic)으로 처리되어 A10이 A3보다 앞에 오는 등 의도와 다른 결과가 나옵니다. 예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다. const arr = [A1, A10, A11, A12, A3A, A3B, A3, A4, B10, B2, F1, 1, 2, F3]; 우리는 이 배열을 유일한 인자로 받아 다음 규칙에 따라 제자리(in-p
JavaScript를 다루다 보면 객체 배열 안에 특정 속성 값이 몇 종류나 존재하는지, 즉 고유(unique)한 값의 개수를 세어야 하는 경우가 자주 있습니다. 예를 들어 식당 주문 데이터가 담긴 다음과 같은 객체 배열이 있다고 가정해 보겠습니다.const orders = [ {table_id: 3, food_id: 5}, {table_id: 4, food_id: 2}, {table_id: 1, food_id: 6}, {table_id: 3, food_id: 4}, {table_id: 4, fo
문제 소개이번 챌린지에서는 전달받은 세 개의 점수에 대한 평균을 구하고, 그 평균값에 해당하는 학점 문자를 반환하는 함수를 작성해야 합니다.학점 기준표는 다음과 같습니다.A: 90점 이상 ~ 100점 이하B: 80점 이상 ~ 90점 미만C: 70점 이상 ~ 80점 미만D: 60점 이상 ~ 70점 미만F: 60점 미만예제 코드아래 코드는 나머지 매개변수(rest parameter)를 사용해 여러 개의 점수를 한 번에 받아 평균을 계산한 후, 조건문으로 학점을 판별합니다.const findGrade = (...scores) =>
문제 소개 JavaScript에서 배열 전체가 아닌 특정 인덱스 범위에 해당하는 부분만 정렬해야 하는 경우가 있습니다. 이번 글에서는 문자열 배열과 시작 인덱스, 끝 인덱스를 인수로 받아, 지정된 범위 안의 요소만 정렬하고 나머지 요소는 그대로 유지하는 함수를 작성해 보겠습니다. 요구 사항 작성할 함수는 다음 세 가지 인수를 받습니다. 첫 번째 인수: 문자열 배열 두 번째 인수: 정렬을 시작할 인덱스(start) 세 번째 인수: 정렬을 끝낼 인덱스(end) start와 end 사이에 있는 요소들만 정렬하고, 그 외의 요소들은 원
개요HTML 입력 필드를 통해 사용자가 입력한 문자열을 받아, 자바스크립트로 해당 문자열 안에 두 개 이상 연속된 공백이 있는지 검사하는 프로그램을 작성해 보겠습니다.연속된 공백이 발견되면, 해당 부분을 모두 하나의 공백으로 치환하는 것이 목표입니다.이때 replace() 메서드의 첫 번째 인자로 정규 표현식 /\s{2}/g를 사용하면 간단하게 원하는 결과를 얻을 수 있습니다. 이 정규 표현식은 공백 문자(\s)가 2번 이상({2}) 반복되는 패턴을 의미하며, 마지막의 g 플래그는 문자열 전체에서 일치하는 모든 부분을 찾도록 지정합
두 개의 리터럴 배열이 다음과 같이 있다고 가정해 보겠습니다.const arr1 = [uno, dos, tres, cuatro];const arr2 = [dos, cuatro];이때 우리는 이 두 배열을 인수로 받아, 첫 번째 배열에 있으면서 두 번째 배열에도 포함된 요소를 모두 삭제하는 자바스크립트 함수를 작성해야 합니다.즉, 위 배열을 처리한 결과는 다음과 같아야 합니다.const output = [uno, tres];filter() 메서드로 차집합 구현하기배열의 내장 메서드인 filter()를 활용하면 아주 간단하게 해결할 수
JavaScript에서 객체 배열을 다루다 보면 특정 속성값이 중복되는 요소들을 하나로 묶어야 하는 경우가 자주 발생합니다. 예를 들어, 데이터 저장 장치 정보를 담은 다음과 같은 배열이 있다고 가정해 보겠습니다. const drives = [ {size:900GB, count:3}, {size:900GB, count:100}, {size:1200GB, count:5}, {size:900GB, count:1} ]; 위 배열을 잘 살펴보면 900GB라는 동일한 size 값이 여러 번 등장하는 것을 확인할 수 있습니다.
자바스크립트에서 배열에 담긴 모든 값이 서로 같은지 확인해야 하는 경우가 종종 있습니다. 예를 들어, 리터럴 값으로 이루어진 배열을 입력받아 배열 내 모든 요소가 동일하면 true를, 하나라도 다른 요소가 있으면 false를 반환하는 함수를 작성할 수 있습니다.구현 아이디어가장 간단하고 효율적인 방법은 배열을 정렬한 뒤 첫 번째 요소와 마지막 요소를 비교하는 것입니다. 정렬된 배열에서 첫 번째 요소와 마지막 요소가 같다면, 그 사이의 모든 요소도 반드시 같은 값이기 때문입니다.또한 길이가 1 이하인 배열(빈 배열 또는 요소가 하나뿐
이번 글에서는 두 개의 숫자 m과 n을 입력받아 m의 n제곱(m^n)을 계산해 반환하는 JavaScript 함수를 만들어 보겠습니다.예를 들어, m = 4, n = 3일 때 결과는 다음과 같습니다.power(4, 3) = 4^3 = 4 * 4 * 4 = 64power(6, 3) = 216JavaScript에는 기본적으로 Math.pow() 메서드가 존재하지만, 이번 예제에서는 재귀(Recursion)와 분할 정복 기법을 활용해 직접 거듭제곱 함수를 구현해 보겠습니다. 이 방식은 단순 반복 곱셈보다 연산 횟수가 적어 효율적입니다.구현