최빈값(Mode)이란? 최빈값은 데이터 집합에서 가장 많이 등장하는 숫자를 의미합니다. 예를 들어, 데이터셋 [2, 3, 1, 3, 4, 2, 3, 1]에서 3은 세 번 등장하여 다른 어떤 수보다 많이 나타나므로 이 데이터셋의 최빈값은 3입니다. 이진 탐색 트리(Binary Search Tree) 트리 자료구조가 다음 조건을 모두 충족하면 유효한 이진 탐색 트리라고 할 수 있습니다. 노드의 왼쪽 서브트리에는 해당 노드의 키보다 작거나 같은 키를 가진 노드만 존재합니다. 노드의 오른쪽 서브트리에는 해당 노드의 키보다 크거나 같은
문제 정의 정방 행렬(행과 열의 개수가 같은 배열의 배열)을 입력받아, 행렬을 대각선 방향으로 지그재그 형태로 순회하면서 그 과정에서 만난 요소들을 순서대로 새로운 배열에 담아 반환하는 JavaScript 함수를 작성해야 합니다. 예를 들어, 함수에 다음과 같은 3×3 행렬이 주어진 경우를 생각해 보겠습니다. const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; 이때 기대되는 출력 결과는 다음과 같습니다. const output = [1, 2, 4, 7, 5, 3, 6, 8, 9]; 순회
문제 소개 정수 배열 arr를 첫 번째 인수로, 단일 정수 target을 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다. 배열에 있는 각 정수에는 + 또는 - 중 하나의 부호를 자유롭게 붙일 수 있습니다. 이때 함수가 해야 할 일은, 각 숫자에 부호를 배치하는 모든 가능한 조합 가운데 배열 전체의 합이 target과 정확히 일치하는 경우가 총 몇 가지인지 세는 것입니다. 예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다. const arr = [1, 1, 1, 1, 1]; const target =
문제 정의 정수 배열 arr를 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 다음 두 조건을 모두 만족하는 인덱스 쌍 (i, j)의 개수를 세어 반환해야 합니다. i < j (i가 j보다 앞선 인덱스) arr[i] > 2 × arr[j] (앞쪽 요소가 뒤쪽 요소의 2배보다 큰 경우) 입력 및 출력 예시 함수의 입력이 다음과 같다면, const input = [2, 4, 3, 5, 1]; 출력은 다음과 같아야 합니다. const output = 3; 출력 설명 조건을 만족하는
문제0과 1로만 구성된 이진 배열 arr를 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 우리 함수는 배열에서 최대 한 개의 0을 1로 뒤집을 수 있다고 가정할 때, 만들 수 있는 연속된 1의 최대 개수를 반환해야 합니다.예를 들어, 함수에 다음과 같은 입력이 주어지면 −const arr = [1, 0, 1, 1, 0];출력은 다음과 같아야 합니다 −const output = 4;출력 설명배열에서 인덱스 1에 있는 0을 1로 뒤집으면 [1, 1, 1, 1, 0]이 되어 앞부분에 연속된 네 개의
좋은 밑수(Good Base)란?정수 num에 대해, k(k ≥ 2)진법으로 num을 표현했을 때 모든 자릿수가 전부 1이라면, 우리는 k를 num의 좋은 밑수(good base)라고 부릅니다.예를 들어, 13을 3진법으로 나타내면 111이 됩니다. 따라서 3은 num = 13의 좋은 밑수입니다.문제 정의숫자를 나타내는 문자열 str을 유일한 인수로 받아, 해당 숫자의 가장 작은 좋은 밑수를 문자열 형태로 반환하는 자바스크립트 함수를 작성해야 합니다.예를 들어, 함수에 다음과 같이 입력한다고 가정해 보겠습니다 −const str =
문제 상황JavaScript에서 문자열 str을 첫 번째 인수로, 정수 n을 두 번째 인수로 받는 함수를 작성해야 합니다. 문자열 str은 영숫자(alphanumeric)와 하이픈(-)으로 구성되어 있습니다.하이픈은 문자열 내의 영숫자들을 그룹으로 나누는 역할을 합니다. 즉, 하이픈이 n개 있다면 문자열은 n+1개의 그룹으로 분할됩니다. 다만 주어진 문자열에서 하이픈의 위치가 잘못 배치되어 있을 수 있습니다.우리의 목표는 각 그룹이 정확히 K개의 문자를 가지도록 만드는 것입니다. 단, 첫 번째 그룹만 예외적으로 K보다 짧아도 되지만
문제 소개매직 문자열(magical string)은 오직 1과 2로만 구성되며, 다음과 같은 독특한 규칙을 따르는 문자열입니다.이 문자열이 매직(magical)이라 불리는 이유는, 문자열 안에서 연속으로 등장하는 1과 2의 개수를 순서대로 이어 붙였을 때 그 결과가 원래 문자열 자기 자신과 동일해지기 때문입니다.매직 문자열 str의 첫 부분은 다음과 같습니다.str = "1221121221221121122……"문자열에서 연속된 1들과 2들을 그룹으로 묶어 보면 다음과 같습니다.1
문제 개요숫자 배열을 첫 번째이자 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.함수의 핵심 임무는 배열에서 세 번째로 큰 수(세 번째 최댓값)를 찾아 반환하는 것입니다. 만약 배열에 서로 다른 값이 3개 미만으로 존재하여 세 번째 최댓값이 없다면, 배열의 최댓값을 대신 반환하면 됩니다.문제 이해하기예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [34, 67, 31, 87, 12, 30, 22];이 배열의 고유한 값들을 내림차순으로 정렬하면 87, 67, 34, 31, 30,
문제 소개 이번 글에서는 JavaScript로 킷캣(Kit-Kat) 배열 문제를 해결하는 방법을 알아보겠습니다. 이 문제는 유명한 FizzBuzz 문제와 매우 유사한 형태의 알고리즘 연습 문제로, 코딩 테스트 준비에도 도움이 됩니다. 요구 사항은 다음과 같습니다. 첫 번째 인자로 자연수 num, 두 번째와 세 번째 인자로 각각 자연수 m과 n을 받는 JavaScript 함수를 작성합니다. 함수는 1부터 num까지(num 포함)의 모든 자연수를 오름차순으로 담은 배열을 반환해야 합니다. 단, 아래 조건에 해당하는 숫자는 문자열로
자연수 수열이란? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12... 이처럼 무한히 이어지는 수열을 자연수 수열(natural number sequence)이라고 합니다. 이번 문제는 다음과 같습니다. 첫 번째이자 유일한 인자로 숫자 num을 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 쉼표와 공백을 제거하고 자연수를 하나로 이어 붙인 문자열에서 num번째에 해당하는 자릿수를 찾아 반환해야 합니다. 문제 예시 예를 들어 입력값이 다음과 같다고 가정해 보겠습니다. const num = 13; 그
두 개의 숫자 m과 n을 매개변수로 받는 JavaScript 함수 add()를 작성해야 합니다. 이 함수는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)과 같은 네 가지 기본 산술 연산자를 사용하지 않고 두 숫자의 합을 계산하여 반환해야 합니다.이 문제는 비트 연산자를 활용하면 우아하게 해결할 수 있습니다. 핵심 아이디어는 디지털 회로의 반가산기(Half Adder) 논리를 확장한 것으로, XOR(^)과 AND(&) 연산만으로 덧셈을 구현하는 방식입니다.예제 코드const m = 67, n = 33; const add =
아름다운 배열(Beautiful Arrangement)이란?1부터 N까지의 정수가 주어졌을 때, 아름다운 배열(beautiful arrangement)은 이 숫자들로 구성된 배열 중에서 모든 위치 i(1 ≤ i ≤ N)에 대해 다음 조건 중 하나라도 성립하는 배열을 말합니다.i번째 위치에 놓인 숫자가 i로 나누어 떨어진다.i가 i번째 위치에 놓인 숫자로 나누어 떨어진다.문제 설명숫자 num을 입력받아, 만들 수 있는 아름다운 배열의 총 개수를 반환하는 자바스크립트 함수를 작성해야 합니다.예를 들어, 함수의 입력이 다음과 같다고 가정
문제 소개0 또는 1만으로 이루어진 이진 배열(binary array) arr를 입력받아, 배열 안에서 0과 1의 개수가 동일하게 포함된 연속 부분 배열(contiguous subarray) 중 가장 긴 것의 길이를 반환하는 자바스크립트 함수를 작성해야 합니다.예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.const arr = [1, 0, 0, 1, 0, 1, 0, 0];이 경우 기대하는 출력 결과는 다음과 같습니다.const output = 6;출력 설명배열의 첫 6개 요소는 1, 0, 0, 1, 0, 1입니
문제 정의영어 알파벳으로 구성된 임의의 문자열 str을 첫 번째 인수로, 문자열 배열 arr을 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다.함수의 목표는 문자열 str에서 일부 문자를 삭제해가며, 배열 arr에도 존재하는 단어 중 가장 긴 것을 찾아내는 것입니다. 함수는 형성 가능한 가장 긴 문자열을 반환해야 합니다.만약 조건을 만족하는 문자열이 하나도 없다면 빈 문자열()을 반환하면 됩니다.입력 예시const str = sdgfdfghdjh; const arr = [sdf, fghj, gfdfg, absc, a
문제 설명정수 배열 arr을 첫 번째 인수로, 단일 정수 target을 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 크기가 최소 2인 연속된 하위 배열(subarray) 중에서 그 합이 k의 배수, 즉 n * k(n은 임의의 정수)가 되는 경우가 존재하는지 확인해야 합니다.조건을 만족하는 하위 배열이 존재하면 true를, 존재하지 않으면 false를 반환합니다.입력 예시const arr = [23, 2, 6, 4, 7];const target = 6;출력 결과const output = true;출력
부분 수열(Subsequence)이란?먼저 용어부터 정리해 보겠습니다. 부분 수열(subsequence)이란 원래 시퀀스에서 일부 문자를 삭제하여 얻을 수 있는 시퀀스로, 남은 요소들의 순서는 그대로 유지됩니다. 예를 들어 "ace"는 "abcde"의 부분 수열입니다. 모든 문자열은 자기 자신의 부분 수열이며, 빈 문자열은 모든 문자열의 부분 수열입니다.문제 정의문자열 배열을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열 안에서 가장 긴 비공통 부분 수열(long
트리(Tree) 자료구조란?트리는 여러 개의 노드가 간선(edge)으로 연결되어 있는 자료구조입니다. 일반적으로 트리의 각 노드는 데이터를 저장하며, 자식 노드에 대한 참조(reference)를 함께 가지고 있습니다.이진 탐색 트리(Binary Search Tree)이진 탐색 트리(BST)는 이진 트리의 한 종류로, 값이 작은 노드는 왼쪽에, 값이 큰 노드는 오른쪽에 배치하는 규칙을 따르는 트리입니다.예를 들어, 유효한 BST의 시각적 표현은 다음과 같습니다. 25 / \ 20 36 / \ / \ 10
이 문제에서 문장(sentence)은 영어 알파벳과 문장 부호를 포함하는 문자열로 정의하며, 단어(word)는 그 문장 안에서 공백으로 구분되는 부분 문자열을 의미합니다. 우리가 작성해야 할 JavaScript 함수는 다음과 같이 동작해야 합니다. 첫 번째 인자로 문장 문자열 str을 받고, 두 번째 인자로 숫자 num을 받습니다. 함수는 먼저 문장 내 각 단어의 출현 빈도를 계산합니다. 그다음, 빈도가 높은 순서(내림차순)대로 정렬하여 가장 빈번한 num개의 단어를 배열로 반환합니다. 예시 예를 들어, 입력 문장과 숫자가 다
문제 소개문자열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 함수가 해야 할 일은, 문자열에서 최대 한 개의 문자를 삭제했을 때 해당 문자열을 회문(palindrome)으로 만들 수 있는지 확인하고, 가능하면 true, 불가능하면 false를 반환하는 것입니다.예시입력 문자열이 다음과 같다고 가정해 보겠습니다.const str = kjlk;이때 기대하는 출력은 다음과 같습니다.const output = true;문자열에서 l을 하나 삭제하면 kjk만 남게 되는데, 이는 앞에서 읽어도 뒤에서 읽어도