문제 정의숫자 배열 arr을 첫 번째 인수로, 숫자 num을 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다.배열의 각 숫자는 1부터 13 사이의 값으로, 플레잉 카드의 번호를 나타냅니다. 이때 우리의 목표는 모든 카드를 크기가 num이고, 서로 연속된 숫자로 이루어진 그룹으로 나눌 수 있는지 판별하는 것입니다.예를 들어 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const arr = [1, 4, 3, 2];const num = 2;출력true출력 설명카드들을 [1, 2], [3, 4] 두 개의 그룹으로 재
산(Mountain) 부분 수열이란?배열 arr의 연속된 부분 배열 sub가 다음 두 조건을 모두 만족할 때, 이를 산(mountain)이라고 정의합니다.부분 배열의 길이가 3 이상입니다. (sub.length >= 3)0 < i < sub.length - 1인 인덱스 i가 존재하여, sub[0] < sub[1] < ... < sub[i] > sub[i+1] > ... > sub[sub.length - 1]을 만족합니다. 즉, 특정 지점(정상)까지는 엄격하게 증가하고, 그 이후부터는
문제 소개이번 글에서는 0과 1로만 구성된 2차원 이진 배열(arr)을 첫 번째이자 유일한 인수로 받아, 행렬을 먼저 가로로 뒤집고(horizontal flip), 그다음 반전(invert)한 결과를 반환하는 JavaScript 함수를 작성해 보겠습니다.가로 뒤집기란?행렬을 가로로 뒤집는다는 것은 각 행의 요소 순서를 거꾸로 바꾸는 것을 의미합니다. 예를 들어 [1, 1, 0]을 가로로 뒤집으면 [0, 1, 1]이 됩니다.반전이란?행렬을 반전한다는 것은 모든 0을 1로, 모든 1을 0으로 바꾸는 것입니다. 예를 들어 [0, 1, 1
순환 큐(Circular Queue)란?순환 큐는 FIFO(First In First Out, 선입선출) 원칙에 따라 연산이 수행되는 선형 자료구조입니다. 일반 큐와 달리 마지막 위치가 다시 첫 번째 위치와 연결되어 원형을 이루며, 이러한 특징 때문에 링 버퍼(Ring Buffer)라고도 부릅니다.순환 큐의 가장 큰 장점은 큐 앞쪽의 빈 공간을 재활용할 수 있다는 점입니다. 일반적인 큐에서는 한 번 가득 차면 앞쪽에 빈 공간이 남아 있어도 더 이상 새로운 요소를 삽입할 수 없습니다. 하지만 순환 큐에서는 뒤쪽 끝이 앞쪽과 연결되어
문제 개요영어 소문자 알파벳으로만 이루어진 문자열 str과, 해당 문자열 안에 반드시 존재하는 단일 문자 char를 인수로 받는 JavaScript 함수를 작성해야 합니다.함수는 문자열 str의 각 문자에 대해, char로 지정된 문자 중 자신과 가장 가까운 것까지의 거리를 담은 배열을 생성하여 반환해야 합니다.입력 · 출력 예시예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const str = somestring; const char = s;출력const output = [0, 1, 2, 1, 0, 1, 2
문제 설명숫자 배열 arr을 첫 번째 인수로, 숫자 num(num은 arr의 길이 이하)을 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다.이 함수는 배열 arr을 최대 num개의 인접한(non-empty) 그룹으로 분할해야 하며, 이때 어떤 요소도 빠짐없이 모든 요소가 반드시 하나의 그룹에 속해야 합니다.가능한 모든 분할 방법 중에서 각 그룹의 평균값을 모두 더한 합이 가장 커지는 분할을 찾고, 그 최댓값을 반환하면 됩니다.예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const arr =
엄격하게 증가하는 수열이란?수열이 엄격하게 증가(Strictly Increasing)한다는 것은 arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1] 조건을 만족한다는 의미입니다. 즉, 인접한 두 원소가 같은 값을 가지지 않으면서 항상 이전 값보다 커야 합니다.문제 설명두 개의 숫자 배열 arr1과 arr2를 각각 첫 번째, 두 번째 인자로 받는 JavaScript 함수를 작성해야 합니다.우리는 두 배열에서 같은 인덱스에 있는 원소끼리 자유롭게 교환(swap)할 수 있습
문제 설명첫 번째 인자로 문자열 str을, 두 번째 인자로 문자열 배열 arr을 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열의 각 요소 arr[i] 중에서 str의 부분 수열(subsequence)에 해당하는 개수를 세어 반환해야 합니다.여기서 부분 수열이란 원본 문자열에서 문자들의 상대적인 순서를 유지하면서 일부 문자를 생략했을 때 얻을 수 있는 문자열을 의미합니다. 반드시 연속된 문자일 필요는 없다는 점이 부분 문자열(substring)과의 차이입니다.입력 및 출력 예시예를 들어 함수에 다음과 같은 입력이
문제 설명문자열 str을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.이 함수는 문자열 안의 모든 영문자를 개별적으로 소문자 또는 대문자로 변환하여 새로운 문자열을 만들 수 있으며, 이렇게 만들 수 있는 모든 가능한 문자열의 목록을 반환해야 합니다.숫자나 특수문자는 대소문자 구분이 없으므로 원래 그대로 유지됩니다.예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const str = k1l2;출력const output = ["k1l2", "k1L2"
문제 JavaScript 함수를 작성해야 합니다. 이 함수는 오직 [ 또는 ] 문자로만 구성된 문자열 str을 입력받습니다. 함수의 목표는 대괄호([ 또는 ])를 임의의 위치에 최소한으로 추가하여, 결과적으로 만들어지는 괄호 조합 문자열이 유효(균형 잡힌)하도록 만드는 것입니다. 마지막에는 추가해야 하는 대괄호의 최소 개수를 반환하면 됩니다. 예를 들어 함수의 입력이 다음과 같다면, 입력 const str = []]; 출력 const output = 1; 출력 설명 문자열 맨 앞에 [를 한 개 추가하면 [[]]이 되어 균형 잡힌
문제 이해하기정수 배열 arr을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.여기서 배열 arr은 원형(circular) 배열로 간주할 수 있습니다. 즉, 배열의 마지막 요소 다음에 다시 첫 번째 요소가 이어지는 구조입니다. 우리 함수는 이 배열에서 비어 있지 않은(non-empty) 하위 배열(subarray) 중 가장 큰 합을 찾아 반환해야 합니다.입력 예시const arr = [2, -2, 3, -1];출력 예시const output = 4;출력 설명원형 배열의 특성상 마지막 요소 뒤에 첫 요소가
문제 이해하기알파벳과 일부 특수 문자가 섞여 있는 문자열 str을 입력받는 JavaScript 함수를 작성해야 합니다.이 함수는 입력 문자열을 기반으로 새로운 문자열을 반환해야 하며, 이때 알파벳이 아닌 문자는 원래 자리에 그대로 유지되고, 알파벳 문자들만 서로 위치를 뒤바꿔야 합니다.예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const str = k_lmn_opq;출력const output = q_pon_mlk;위 결과를 보면 언더스코어(_)의 위치는 변하지 않았지만, 알파벳들만 정확히 역순으로 배치된
문제 정의두 개의 숫자 배열 arr1과 arr2를 각각 첫 번째, 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다.두 배열에 담긴 요소들의 합은 서로 다릅니다. 함수는 첫 번째 배열에서 한 요소를 골라 두 번째 배열로 옮기고, 동시에 두 번째 배열에서 한 요소를 골라 첫 번째 배열로 옮겨서 두 배열의 합이 서로 같아지도록 만들어야 합니다. 최종적으로 이렇게 교환된 두 요소를 배열 형태로 반환하면 됩니다.예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const arr1 = [1, 2, 5];co
문제 소개이번 글에서는 JavaScript를 이용해 연결 리스트(Linked List)의 중간 노드를 찾는 방법을 알아보겠습니다.함수는 연결 리스트의 head(첫 번째 노드)를 유일한 인자로 받으며, 리스트의 가장 중앙에 위치한 노드에 저장된 값을 반환해야 합니다. 만약 중앙에 해당하는 노드가 두 개라면, 그중 두 번째 노드의 값을 반환하는 것이 규칙입니다.예시다음과 같은 연결 리스트가 주어졌다고 가정해 봅시다.입력:[4, 6, 8, 9, 1]출력:const output = 8;리스트의 길이가 5이므로 정확히 중앙에 있는 값은 8입
피보나치 수열이란?수열 X₁, X₂, ..., Xₙ이 다음 두 조건을 만족할 때 이를 피보나치 수열이라고 합니다.n ≥ 3 (수열의 길이가 최소 3 이상)모든 i + 2 ≤ n에 대해 Xᵢ + Xᵢ₊₁ = Xᵢ₊₂ (연속된 두 항의 합이 다음 항과 같음)문제 정의숫자 배열 arr을 첫 번째이자 유일한 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열 내에서 존재하는 가장 긴 피보나치 부분 수열의 길이를 찾아 반환해야 합니다.여기서 부분 수열(subsequence)이란 원본 배열 arr에서 임의 개수의 요소(0
문제 이해 길이가 같은 두 개의 숫자 배열 arr1과 arr2를 입력받는 JavaScript 함수를 작성해야 합니다. 함수의 목표는 첫 번째 배열 arr1의 요소들을 재배치(셔플)하여, arr2의 같은 위치에 있는 요소보다 큰 요소의 개수를 최대한 많이 만드는 것입니다. 재배치가 끝나면 그 배열을 반환하면 됩니다. 예를 들어, 함수에 다음과 같은 입력이 주어졌을 때를 살펴보겠습니다. 입력 const arr1 = [3, 5, 12, 19]; const arr2 = [2, 9, 3, 12]; 출력 const output = [3, 1
문제 정의숫자 배열 arr을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.다음과 같은 상황을 가정해 보겠습니다:어느 가게 주인이 정확히 5원짜리(₹5) 상품 하나를 판매하고 있습니다. 손님들이 줄을 서서 각각 이 상품을 한 개씩 구매하려고 하는데, 손님들은 가게 주인에게 5원(₹5), 10원(₹10) 또는 20원(₹20) 짜리 지폐를 낼 수 있습니다. 가게 주인은 처음에 돈을 한 푼도 가지고 있지 않으며, 배열은 줄에 선 손님들이 내는 지폐를 순서대로 나타냅니다.우리의 함수는 가게 주인이 모든 손님에게
문제 설명균형 잡힌(balanced) 대괄호 문자열 str을 첫 번째이자 유일한 인자로 받아 처리하는 JavaScript 함수를 작성해야 합니다.함수는 아래 규칙에 따라 문자열의 점수를 계산한 뒤 반환해야 합니다.[]의 점수는 1입니다.AB의 점수는 A + B입니다. 단, A와 B는 각각 균형 잡힌 괄호 문자열이어야 합니다.[A]의 점수는 2 × A입니다. 단, A는 균형 잡힌 괄호 문자열이어야 합니다.예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const str = [][];출력const output =
문제 정의JavaScript 함수를 작성해야 합니다. 이 함수는 하나의 문자열 str, 즉 하나의 문장을 유일한 인수로 받습니다.함수의 목표는 문자열에서 서로 인접해 있는 동일한 단어 쌍의 개수를 세어 반환하는 것입니다. 이때 단어를 비교할 때는 대소문자를 구분하지 않아야 합니다. 즉, it과 It은 같은 단어로 간주하여 개수에 포함됩니다.예를 들어, 함수에 다음과 같은 입력이 주어진다고 가정해 보겠습니다.입력const str = This this is a a sample string;출력const output = 2;출력 설명Th
문제 소개이번 글에서는 첫 번째 인수로 숫자 num을, 두 번째 인수로 숫자 parts를 받는 JavaScript 함수를 작성해 보겠습니다.이 함수는 num을 정확히 parts개의 숫자로 나누어야 하며, 다음 두 가지 조건을 만족해야 합니다.나눠진 숫자들은 서로 최대한 가까운 값이어야 합니다.가능한 한 균등하게 나누어야 합니다.결과 배열에서 숫자들의 순서는 중요하지 않습니다.예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.입력const num = 20;const parts = 6;출력const output = [