문제 정의이번 글에서는 두 개의 문자열과 하나의 숫자 n을 인자로 받는 JavaScript 함수를 작성해 보겠습니다. 이 함수는 두 문자열을 비교하여 서로 같은 문자들을 포함하고 있는지 검사합니다. 두 문자열이 문자의 순서와 관계없이 동일한 문자들을 담고 있거나, 서로 다른 문자가 최대 n개 이하라면 true를 반환하고, 그 외의 경우에는 false를 반환해야 합니다.구현 아이디어접근 방식은 다음과 같습니다.첫 번째 문자열의 각 문자를 순서대로 순회하면서, 해당 문자가 두 번째 문자열에도 존재하는지 확인합니다. 존재하지 않는 문자가
문제 개요숫자 배열을 입력받아, 모든 짝수는 홀수보다 왼쪽에, 모든 홀수는 짝수보다 오른쪽에 위치하도록 재배열한 배열을 반환하는 JavaScript 함수를 작성해야 합니다.이 문제는 별도의 새로운 알고리즘 없이도 Array.prototype.sort() 메서드에 사용자 정의 비교 함수(comparator)를 전달하는 방식으로 간단하게 해결할 수 있습니다.해결 접근 방식숫자가 짝수인지 판별하는 헬퍼 함수 isEven을 작성합니다.sort() 메서드에 비교 함수를 전달합니다.첫 번째 요소 a가 짝수이고 두 번째 요소 b가 홀수라면 -1
이번 글에서는 양수와 음수가 섞여 있는 숫자 배열을 입력받아, 배열을 단 한 번만 순회하여 두 수의 곱 중 최댓값을 반환하는 JavaScript 함수를 작성해 보겠습니다.문제의 핵심 아이디어최대 곱은 두 가지 경우에서 나올 수 있습니다.가장 큰 양수 두 개의 곱가장 작은 음수(절댓값이 큰 음수) 두 개의 곱 — 음수 × 음수 = 양수이므로 매우 클 수 있습니다.따라서 배열을 한 번 순회하면서 최댓값 두 개(max1, max2)와 최솟값 두 개(min1, min2)를 동시에 추적하고, 마지막에 두 조합의 곱을 비교하면 O(n) 시간
문제 상황특정한 순서 없이 문자들이 나열된 두 개의 문자열이 있다고 가정해 보겠습니다. 이때 두 문자열을 인자로 받아, 두 번째 문자열 중에서 첫 번째 문자열에 포함된 모든 문자를 제거한 결과를 반환하는 함수를 작성해야 합니다.예를 들어 다음과 같은 문자열이 있다고 합시다.const first = hello world; const second = hey there;위 예제에서 첫 번째 문자열 hello world에 포함된 문자들(h, e, l, o, 공백, w, r, d)을 두 번째 문자열 hey there에서 모두 걸러내면 yt라
문제 이해하기문자열을 입력받아, 원본 문장에 포함된 모든 단어를 각각 뒤집은 새로운 문자열을 반환하는 JavaScript 함수를 작성해야 합니다.예를 들어, 원본 문자열이 다음과 같다면 −Hello World how is it outside출력 결과는 다음과 같아야 합니다 −olleH dlroW woh si ti edistuo즉, 단어의 순서는 그대로 유지하되 각 단어 내부의 글자만 거꾸로 뒤집는 것이 핵심입니다.코드 구현이제 해당 기능을 수행하는 함수를 작성해 보겠습니다 −const str = He
문제 개요JavaScript 함수를 작성하여 문자열을 입력받고, 중복되지 않은 문자(한 번만 등장하는 문자)를 모두 제거한 새로운 문자열을 반환해야 합니다. 즉, 두 번 이상 등장하는 문자만 남기는 것이 핵심입니다.예를 들어, 입력 문자열이 다음과 같다면 −teeth_foot출력 결과는 다음과 같아야 합니다.teetoot위 예제에서 h, _, f는 각각 한 번만 등장하므로 제거되고, t, e, o처럼 여러 번 등장하는 문자만 남게 됩니다.구현 방법이 문제는 split()으로 문자열을 배열로 변환한 뒤, filter()와
못생긴 숫자(Ugly Number)란?십진수 체계에서 못생긴 숫자(Ugly Number)란 소인수가 오직 2, 3, 5뿐인 양의 정수를 의미합니다.예를 들어, 1부터 10까지의 모든 정수는 못생긴 숫자에 해당하며, 12(= 2 × 2 × 3) 역시 소인수가 2와 3뿐이므로 못생긴 숫자입니다. 반면 14처럼 소인수로 7을 포함하는 수는 못생긴 숫자가 아닙니다.판별 알고리즘주어진 수가 못생긴 숫자인지 확인하는 방법은 매우 직관적입니다. 수를 2, 3, 5로 나눌 수 있는 동안 계속 나누어 주고, 그 과정을 거쳐 최종적으로 1이 되면 해
이번 글에서는 두 개의 문자열 string1과 string2를 인수로 받아, string1이 string2로 끝나는지 여부를 판별하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같습니다.The game is on 여기서 on을 검사하면 true를 반환해야 합니다.반면에,the game is off 위 문자열에서 of를 검사하면 false를 반환해야 합니다.그럼 이 함수의 코드를 직접 작성해 보겠습니다.예제 코드const first = The game is on; const second = on; const en
두 개의 숫자 배열을 인수로 받아 서로 같은지 검사하는 자바스크립트 함수를 작성해야 한다고 가정해 보겠습니다.여기서 말하는 같음은 다음 두 조건 중 하나를 만족하는 경우로 정의합니다.두 배열에 담긴 요소가 순서와 관계없이 완전히 동일한 경우첫 번째 배열의 모든 요소 합과 두 번째 배열의 모든 요소 합이 같은 경우예를 들어 다음과 같습니다.[3, 5, 6, 7, 7]과 [7, 5, 3, 7, 6]은 같은 배열입니다.[1, 2, 3, 1, 2]와 [7, 2]도 합이 9로 같으므로 같은 배열입니다.하지만 [3, 4, 2, 5]와 [2,
문제 정의반복되는 값이 포함된 숫자 배열을 입력받아, 배열 전체 길이의 절반(n/2)보다 많이 등장하는 요소, 즉 다수 요소(majority element)가 존재하는지 판별하는 자바스크립트 함수를 작성해 보겠습니다. 다수 요소가 존재하면 true를, 존재하지 않으면 false를 반환합니다.예를 들어, 배열 [12, 5, 67, 12, 4, 12, 4, 12, 6, 12, 12]에서 숫자 12는 총 11개 요소 중 6번 등장하므로 과반수(5.5회)보다 많습니다. 반면 두 번째 예시 배열에는 그러한 요소가 없으므로 결과는 false가
리더(Leader) 요소란 무엇일까요? 숫자 배열에서 어떤 요소가 오른쪽에 있는 모든 요소보다 클 때, 그 요소를 리더(Leader)라고 부릅니다. 이번 글에서는 숫자 배열을 입력받아 리더 조건을 충족하는 모든 요소들로 이루어진 하위 배열을 반환하는 자바스크립트 함수를 작성해 보겠습니다. 예를 들어 다음과 같은 입력 배열이 있다고 가정해 보겠습니다. [23, 55, 2, 56, 3, 6, 7, 1] 이 경우 기대하는 출력 결과는 다음과 같습니다. [56, 7, 1] 그 이유는 다음과 같습니다. 56은 오른쪽의 모든 요소(3, 6,
두 개의 문자열을 인수로 받아, 첫 번째 문자열이 두 번째 문자열로 시작하는지 여부를 판별하여 true 또는 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 다음과 같은 경우를 생각해 볼 수 있습니다.두 문자열이 다음과 같다면: Disaster management report Disas 함수는 true를 반환해야 합니다.구현 예제먼저 직접 함수를 작성하는 방법을 살펴보겠습니다. 두 번째 문자열의 길이만큼 첫 번째 문자열 앞부분을 잘라낸 뒤, 그 결과가 두 번째 문자열과 일치하는지 비교하면 됩니다. {
수학에서 메르센 소수(Mersenne prime)는 어떤 정수 n에 대해 M(n) = 2n − 1의 형태로 나타낼 수 있으면서 실제로 소수인 수를 의미합니다.예를 들어, 가장 작은 네 개의 메르센 소수는 3, 7, 31, 127입니다. 각각 2²−1, 2³−1, 2⁵−1, 2⁷−1로 표현할 수 있기 때문입니다.이번 글에서는 하나의 숫자를 입력받아 해당 숫자가 메르센 소수인지 판별하는 자바스크립트 함수를 작성해 보겠습니다.메르센 소수의 판별 조건어떤 수가 메르센 소수이려면 다음 두 가지 조건을 모두 만족해야 합니다.그 수 자체가 소수
문자열을 입력받아 해당 문자열에 포함된 모음과 기타 문자 개수의 합과 자음의 개수 사이의 차이를 반환하는 함수를 작성해야 합니다.문제 이해하기예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.HEllo World!!이 문자열에는 자음이 7개, 모음이 3개, 그리고 느낌표(!) 같은 기타 문자가 3개 포함되어 있습니다. 따라서 출력 결과는 다음과 같이 계산됩니다.|7 - (3+3)| = 1즉, 최종 출력값은 1이 됩니다.구현 코드이제 이 함수를 직접 구현해 보겠습니다. reduce() 메서드를 활용하면 문자열을 한 번만 순회하
이번 글에서는 양의 정수 n을 입력받아, 그 숫자의 자릿수들을 재배열하여 만들 수 있는 최댓값과 최솟값의 차이를 반환하는 함수 maximumDifference()를 작성해 보겠습니다.예를 들어 숫자 n이 203이라고 가정해 보겠습니다.자릿수를 내림차순으로 배열하면 만들 수 있는 최댓값은 320자릿수를 오름차순으로 배열하면 만들 수 있는 최솟값은 23 (0은 맨 앞에 올 수 없으므로 일의 자리에 배치)따라서 두 값의 차이는 다음과 같습니다.320 - 23 = 297즉, 이 경우 함수는 297을 반환해야 합니다.구현 방법핵심 아이디어는
일반적으로 양의 정수 n의 팩토리얼(계승)은 n 이하의 모든 양의 정수를 곱한 값입니다. 예를 들어 factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 입니다. 서투른 팩토리얼(clumsy factorial)은 기존 팩토리얼에서 연산자만 바꾼 변형 문제입니다. 정수를 내림차순으로 배치하되, 곱셈 자리에 곱하기(*), 나누기(/), 더하기(+), 빼기(-)를 정해진 순서대로 순환하며 적용합니다. 예를 들어 clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 -
다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.const arr = [3, 6, 7, 3, 1, 4, 4, 3, 6, 7];이 배열에는 총 10개의 요소가 포함되어 있으므로, 마지막 요소의 인덱스는 9가 됩니다.우리는 이러한 배열을 매개변수로 받아, 각 요소에 역방향 인덱스를 곱한 값들의 합계를 반환하는 함수를 작성해야 합니다.위 예시를 기준으로 하면 계산식은 다음과 같습니다.(9*3)+(8*6)+(7*7)+(6*3)+.... 배열 끝까지 반복즉, 첫 번째 요소에는 9를 곱하고, 두 번째 요소에는 8을 곱하는 방식으로 뒤에서부터
JavaScript 개발을 하다 보면 중첩된 객체 안에서 특정 값을 가진 키(key)가 무엇인지 찾아야 하는 경우가 종종 있습니다. 이 글에서는 임의의 깊이까지 중첩된 객체를 탐색하여, 지정한 값과 일치하는 모든 키를 배열로 반환하는 Object.prototype.keysOf() 메서드를 직접 구현하는 방법을 알아보겠습니다. 문제 정의 다음과 같은 객체가 있다고 가정해 봅시다. const obj = { name: Vivek Sharma, occupation: Software Engineer, age: 23, conta
숫자(Number) 또는 문자열(String) 리터럴로 구성된 배열에는 중복된 요소가 포함될 수 있습니다. 이번 글에서는 양의 정수 n을 유일한 인수로 전달받아, 배열 안에서 n번 이상 등장하는 모든 요소를 모아 새로운 배열로 반환하는 함수를 작성해 보겠습니다.접근 방법이 문제는 Map() 객체를 활용해 깔끔하게 해결할 수 있습니다. 배열을 순회하면서 각 요소의 등장 빈도를 Map에 기록하고, 지정한 횟수 조건을 만족한 요소만 결과 배열에 담아 반환하는 방식입니다.예제 코드const arr = [34, 6, 34, 8, 54, 7,
완전히 무작위로 섞여 있는 숫자 배열이 주어졌을 때, 이 배열을 정렬하지 않고 그 안에서 가장 큰 숫자와 가장 작은 숫자의 차이를 반환하는 함수를 작성해야 합니다.배열을 오름차순으로 정렬한 뒤 첫 번째 요소와 마지막 요소를 빼는 방법도 있지만, 정렬은 일반적으로 O(n log n)의 시간 복잡도를 가지므로 효율적이지 않습니다. 대신 배열을 단 한 번만 순회하면서 최댓값과 최솟값을 동시에 추적하면 O(n)의 시간 복잡도로 문제를 해결할 수 있습니다.reduce() 메서드를 활용한 해결 방법JavaScript의 Array.prototy