이번 글에서는 문자열을 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해 보겠습니다. 이 문자열은 시작 부분과 끝 부분에 물음표(?)가 포함되어 있을 수 있으며, 함수는 문자열의 맨 앞과 맨 뒤에 있는 모든 물음표를 제거하되 나머지 내용은 그대로 유지해야 합니다.예시 −입력 문자열이 다음과 같다면 −const str = ??this is a ? string?;기대하는 출력 결과는 다음과 같습니다 −const output = this is a ? string;예제 코드다음은 이 문제를 해결하는 전체 코드입니다 −const
이번 튜토리얼에서는 세 개의 인수를 받는 JavaScript 함수를 작성해 보겠습니다. 첫 번째 인수는 문자열, 두 번째 인수는 숫자, 세 번째 인수는 단일 문자(이하 char)입니다.두 번째 인수로 전달되는 숫자는 항상 문자열 길이보다 작다고 가정합니다. 이 함수는 문자열에서 n글자마다 지정된 문자를 삽입하여 새로운 문자열을 만든 뒤 이를 반환해야 합니다.예시예를 들어 다음과 같이 인수를 전달했다고 가정해 보겠습니다.const str = NewDelhi; const n = 3; const char = ;그렇다면 함수는 아래와 같
이번 글에서는 숫자 하나를 입력받아 해당 수의 팩토리얼(계승)을 반환하는 두 가지 자바스크립트 함수를 작성해 보겠습니다.첫 번째 함수는 for 루프 또는 while 루프를 사용해 팩토리얼을 계산하고, 두 번째 함수는 재귀(recursion) 방식으로 팩토리얼을 계산합니다.마지막으로 두 함수를 대량의 반복 작업으로 실행하여 각각 걸리는 시간을 측정하고, 어느 쪽이 더 효율적인지 비교해 보겠습니다.예제 코드다음은 전체 코드입니다.const factorial = (num = 1) => { let result = 1;
소수란 무엇인가? 소수(prime number)는 1보다 큰 자연수 중에서 두 개의 더 작은 자연수를 곱하여 만들 수 없는 수를 말합니다. 다시 말해, 1과 자기 자신만을 약수로 가지는 수입니다. 대표적인 예로 2, 3, 5, 7, 11 등이 있으며, 1보다 크면서 소수가 아닌 자연수는 모두 합성수(composite number)라고 부릅니다. 소수 판별(primality test)은 입력으로 주어진 숫자가 소수인지 아닌지를 판별하는 알고리즘을 의미합니다. 이번 글에서는 숫자 하나를 인자로 받아 해당 숫자가 소수인지 여부를 확인하는
수학에서 유클리드 알고리즘(유클리드 호제법)은 두 수의 최대공약수(GCD, Greatest Common Divisor), 즉 두 수를 모두 나머지 없이 나누어떨어지게 하는 가장 큰 수를 구하는 고전적인 방법입니다.유클리드 호제법의 원리이 알고리즘은 다음과 같은 원리에 기반합니다. 두 수의 최대공약수는 더 큰 수를 큰 수에서 작은 수를 뺀 차이로 바꾸더라도 변하지 않는다.예를 들어 252와 105의 최대공약수는 21입니다(252 = 21 × 12, 105 = 21 × 5). 동시에 21은 105와 252 − 105 = 147의 최대공
숫자를 입력받아 해당 숫자가 2의 거듭제곱인지 여부를 판별하는 자바스크립트 함수를 작성해야 합니다.예시 −f(23) = false f(16) = true f(1) = true f(1024) = true접근 방법2의 거듭제곱 수를 이진수로 표현하면 항상 단 하나의 비트만 1로 설정되어 있다는 특징이 있습니다.1: 0001 2: 0010 4: 0100 8: 1000따라서 먼저 숫자가 0보다 큰지 확인한 후, 비트 연산 트릭을 활용해 딱 하나의 비트만 켜져 있는지 검사할 수 있습니다.num & (num - 1)이 연산의 원리는 다
문제 개요 입력 문자열 str과 패턴 p가 주어졌을 때, 마침표(.)와 별표(*)를 지원하는 정규식 매칭 기능을 직접 구현해야 합니다. 각 기호의 역할은 다음과 같습니다. . → 임의의 단일 문자 하나와 일치합니다. * → 바로 앞에 오는 문자가 0번 이상 반복되는 경우와 일치합니다. 여기서 중요한 점은 매칭이 입력 문자열 전체를 덮어야 한다는 것입니다. 부분 일치는 인정되지 않습니다. 제약 조건 str은 비어 있을 수 있으며, 소문자 a~z만 포함합니다. p는 비어 있을 수 있으며, 소문자 a~z와 ., * 문자만 포함합니
문제 개요문자열 안에 여러 개의 숫자가 섞여 있을 때, 이 숫자들을 모두 추출하여 하나의 숫자로 만들어주는 자바스크립트 함수를 작성해 보겠습니다.예를 들어 sfsd8fsdf6dsfsd8sdfs28fd0 같은 문자열이 입력되면, 함수는 문자열에 포함된 모든 숫자를 순서대로 이어 붙여 86828이라는 결과를 반환해야 합니다.참고: 만약 문자열에 숫자가 전혀 포함되어 있지 않다면 함수는 0을 반환해야 합니다.예제 코드const str = sfsd8fsdf6dsfsd8sdfs28fd0;const pickNumbers = (str = ) =
두 개의 문자열 str1과 str2를 각각 첫 번째, 두 번째 인수로 받는 자바스크립트 함수를 작성해야 합니다.이 함수는 어떤 문자열도 재정렬하지 않은 상태에서 str1의 일부 문자를 삭제하여 str2를 만들 수 있는지 판단해야 합니다.예시예를 들어 두 문자열이 다음과 같다고 가정해 보겠습니다.const str1 = sjkfampeflef;const str2 = sample;이때 출력값은 true가 되어야 합니다. str1에서 몇 개의 문자만 제거하면 문자 순서를 바꾸지 않고도 str2인 sample을 얻을 수 있기 때문입니다.코드
숫자 배열을 유일한 인수로 받아, 배열 내 임의의 세 요소 중 곱이 가장 커지는 조합을 찾는 JavaScript 함수를 작성해야 합니다. 함수는 최종적으로 해당 세 요소의 곱을 반환해야 합니다.예시입력 배열이 다음과 같다면 −const arr = [-10, 7, 29, 30, 5, -10, -70];출력은 다음과 같아야 합니다 −const output = 21000그 이유는 세 숫자가 30, -10, -70이기 때문입니다. 음수끼리 곱하면 양수가 되므로, 가장 큰 양수인 30과 절댓값이 가장 큰 두 음수 -10, -70을 곱한 값이
이번 문제에서는 숫자 배열을 입력받아 두 요소 사이의 최대 차이를 구하는 JavaScript 함수를 작성해야 합니다. 단, 중요한 조건이 있습니다. 더 작은 값이 반드시 더 큰 값보다 배열의 앞쪽에 위치해야 한다는 점입니다. 즉, 먼저 나온 낮은 값과 그 이후에 나온 높은 값의 차이만 유효합니다. 문제 이해하기 다음과 같은 배열을 살펴보겠습니다. const arr = [2, 5, 6, 12, 1]; 이 배열에 대해 함수는 10을 반환해야 합니다. 배열 전체에서 가장 큰 값은 12, 가장 작은 값은 1입니다. 하지만 1은 12보다
문제 소개숫자로 이루어진 배열을 입력받아, 각 위치의 값이 자기 자신을 제외한 나머지 모든 요소의 곱이 되는 새로운 배열을 구성하는 JavaScript 함수를 작성해야 합니다. 즉, 배열 전체의 곱을 구한 뒤 각 요소로 나누면 원하는 결과를 얻을 수 있습니다.예를 들어 다음과 같은 입력 배열이 주어졌다고 가정해 보겠습니다.const arr = [1, 2, 3, 4, 5];전체 곱은 1 × 2 × 3 × 4 × 5 = 120입니다. 따라서 각 위치의 출력값은 120을 해당 요소로 나눈 값이 되며, 결과 배열은 다음과 같습니다.cons
두 개의 숫자 배열, 예를 들어 arr1과 arr2를 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수의 목표는 두 배열에 모두 존재하는 요소, 즉 두 배열의 교집합을 찾아내는 것입니다.여기서 중요한 조건이 하나 있습니다. 한 번 교집합으로 확인된 요소는 이후에 두 배열에서 다시 등장하더라도 결과에 중복해서 포함되어서는 안 됩니다. 즉, 각 교집합 요소는 결과 배열에 단 한 번만 나타나야 합니다.예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr1 = [1, 5, 7, 3, 1]; const arr2
문자열을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열에 포함된 단어들의 순서를 거꾸로 뒤집은 새로운 문자열을 반환해야 합니다. 여기에는 한 가지 조건이 있습니다. 바로 자바스크립트의 내장 배열 메서드인 reverse()를 사용하지 않고 문제를 해결해야 한다는 점입니다. 예시 입력 문자열이 다음과 같다고 가정해 보겠습니다. const str = this is a string; 그렇다면 함수는 아래와 같은 출력 문자열을 반환해야 합니다. string a is this 구현 코드 다음은 위 문제를
이번 글에서는 숫자 하나를 인수로 받아, 재귀(recursion)를 활용해 해당 숫자의 2진수 표현을 문자열로 반환하는 JavaScript 함수를 작성해 보겠습니다.예시 −f(4) = 100 f(1000) = 1111101000 f(8) = 1000재귀 변환의 동작 원리10진수를 2진수로 바꾸는 핵심 아이디어는 간단합니다. 주어진 수를 2로 나눈 나머지가 현재 자리의 비트가 되고, 몫에 대해 같은 과정을 반복하면 됩니다. 이 과정을 수가 1보다 작아질 때까지 재귀적으로 수행한 뒤, 호출이 거꾸로 풀리면서 각 단계에서 구한 비트가 뒤
JavaScript의 delete 연산자는 원래 객체(object)를 대상으로 설계된 연산자입니다. 그런데 JavaScript에서 배열 역시 인덱스를 키로 가지는 일종의 객체이기 때문에, 배열에도 delete 연산자를 사용할 수 있습니다. 문제는 이때 많은 개발자가 예상하지 못한 결과가 나온다는 점입니다. 배열 리터럴 준비하기 다음과 같은 배열을 가정해 보겠습니다. const arr = [a, b, c, d, e]; 예제 코드 실행 아래 프로그램을 실행했을 때 어떤 결과가 나올지 먼저 예측해 보세요. const arr = [a, b
문제 이해하기 숫자 배열을 유일한 인수로 받아, 배열에서 번갈아 등장하는 요소들(교차 요소)의 합을 계산한 뒤 그 결과를 반환하는 JavaScript 함수를 작성해야 합니다. 예를 들어, 입력 배열이 다음과 같다면 − const arr = [1, 2, 3, 4, 5, 6, 7]; 출력 결과는 다음과 같아야 합니다 − 1 + 3 + 5 + 7 = 16 즉, 첫 번째 요소부터 시작하여 한 칸씩 건너뛰며 요소를 더하는 방식입니다. 구현 코드 다음은 위 문제를 해결하는 전체 코드입니다 − const arr
문제 개요JavaScript에서 숫자 또는 문자열 형태의 연도를 입력받아, 해당 연도가 속한 세기를 계산해 반환하는 함수를 작성해야 합니다. 세기 계산은 단순히 연도를 100으로 나누는 것만으로는 부족하며, 2000년처럼 끝자리가 00인 해는 별도로 처리해야 한다는 점에 유의해야 합니다.예를 들어 다음과 같습니다.f(2000) = 20f(1999) = 20f(2002) = 212000년은 20세기의 마지막 해이므로 20세기에 속하고, 2001년부터는 21세기가 시작됩니다.구현 코드const centuryFromYear = year
문제 이해하기두 개의 문자열, 예를 들어 str1과 str2를 입력받아 두 문자열에 공통으로 존재하는 문자의 개수를 세는 JavaScript 함수를 작성해야 합니다.여기서 말하는 공통 문자란 두 문자열 모두에 나타나는 문자를 의미합니다. 같은 문자가 여러 번 등장하는 경우에는 양쪽 문자열에서 등장한 횟수 중 더 적은 횟수만큼만 카운트한다는 점에 유의해야 합니다.예시다음과 같은 두 문자열이 있다고 가정해 보겠습니다.const str1 = aabbcc; const str2 = adcaa;str1에는 a가 2개, b가 2개, c가 2개
JavaScript에서는 두 개의 숫자를 입력받아 그 크기를 비교하는 함수를 간단하게 작성할 수 있습니다. 이번 글에서는 num1과 num2라는 두 숫자를 받아 다음과 같이 결과를 반환하는 함수를 만들어 보겠습니다.num1이 num2보다 큰 경우 → greater를 반환합니다.num2가 num1보다 큰 경우 → smaller를 반환합니다.두 숫자가 같은 경우 → equal을 반환합니다.구현 코드아래는 화살표 함수(arrow function)를 사용해 작성한 전체 코드입니다. 추가적으로, 인자가 숫자 타입인지 검사하는 유효성 확인 로