문제 상황예를 들어 다음과 같은 객체 배열이 있다고 가정해 보겠습니다. 각 객체는 id, score, isCut, dnf 네 가지 속성을 가지고 있습니다.const arr = [ { id: 1, score: 1, isCut: false, dnf: false }, { id: 2, score: 2, isCut: false, dnf: false }, { id: 3, score: 3, isCut: false, dnf: false }, { id: 4, score: 4, isCut: false, dnf: false
JavaScript에서 문자열을 입력받아 그 안에 포함된 알파벳(대문자 또는 소문자)의 개수를 세는 함수를 작성해 보겠습니다. 공백, 숫자, 특수문자 등은 제외하고 순수하게 영문자만 카운트하는 것이 핵심입니다.문제 이해하기예를 들어 입력 문자열이 다음과 같다면,const str = this is a string!;공백과 느낌표(!)를 제외한 알파벳은 총 13개이므로 출력 결과는 다음과 같아야 합니다.13구현 방법먼저 주어진 문자가 알파벳인지 판별하는 헬퍼 함수 isAlpha를 만들고, 문자열을 한 글자씩 순회하면서 알파벳인 경우에만
문제 개요 리터럴 값(문자열, 숫자 등)으로 이루어진 배열을 인자로 받아 가장 많이 등장하는 값을 반환하는 자바스크립트 함수를 작성해 보겠습니다. 단, 여러 값의 등장 횟수가 서로 같을 경우에는 그중 배열에서 가장 먼저 등장한 값을 반환해야 합니다. 문제 예시 다음 배열을 살펴보겠습니다. const arr = [25, 50, a, a, b, c]; 여기서는 a가 두 번 등장해 빈도가 가장 높으므로 결과는 a가 되어야 합니다. const arr = [75, 100, a, b, b, a]; 이 경우 a와 b가 각각 두 번씩 등장하여
문제 정의문자열 배열을 인수로 받아, 배열 안에 존재하는 모든 부분 문자열(substring)과 슈퍼스트링(superstring) 조합을 찾아 해당 요소들을 배열로 반환하는 JavaScript 함수를 작성해야 합니다.예를 들어 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.const arr = [abc, abcd, abcde, xyz];이때 기대되는 출력 결과는 다음과 같습니다.const output = [abc, abcd, abcde];'xyz'는 다른 어떤 문자열과도 포함 관계가 없기 때문에 제외되고, 나머지 세
두 개의 배열, 예를 들어 arr1과 arr2를 매개변수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수의 역할은 arr1의 문자열 중에서 arr2의 문자열 안에 포함되어 있는(즉, 부분 문자열에 해당하는) 값들을 추려낸 뒤, 그 결과를 사전순(lexicographical order)으로 정렬하여 반환하는 것입니다. 문제 접근 방법 구현 흐름은 다음과 같습니다. 먼저 arr1의 각 문자열을 순회하면서, 해당 문자열이 arr2의 문자열 중 하나라도 포함하고 있는지 확인합니다. 자바스크립트의 String.prototype.inc
이번 글에서는 문자열을 인수로 받아 그 안에 포함된 모음(vowel)의 개수를 세는 자바스크립트 함수를 작성해 보겠습니다.단순히 전체 모음 개수만 반환하는 것이 아니라, 각 모음(a, e, i, o, u)별로 몇 번 등장했는지를 객체(object) 형태로 매핑하여 반환하는 것이 목표입니다.구현 아이디어구현 절차는 다음과 같습니다.split() 메서드를 사용해 문자열을 개별 문자 배열로 분리합니다.모음 문자열 aeiou를 기준으로 각 문자가 모음인지 판별합니다.toLowerCase()로 소문자로 변환하여 대소문자를 구분 없이 처리합니
이번 글에서는 숫자 배열을 첫 번째 인수로, 하나의 숫자를 두 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다.이 함수의 역할은 배열에 포함된 숫자들 중에서 두 번째 인수로 전달된 값(목표 값)과 가장 가까운 숫자를 찾아, 해당 숫자의 인덱스를 반환하는 것입니다.동작 원리가장 가까운 값을 찾는 핵심 아이디어는 다음과 같습니다.배열을 처음부터 끝까지 순회하면서 각 요소와 목표 값 사이의 절댓값 차이를 계산합니다.현재까지 발견한 최소 차이보다 더 작은 차이를 가진 요소가 나타나면, 그 요소의 인덱스를 저장합니다.순회가 끝
JavaScript 프로그래밍을 하다 보면 두 개의 배열을 비교하여 특정 배열에만 존재하는 요소를 추출해야 하는 경우가 자주 발생합니다. 이번 글에서는 두 개의 배열을 인자로 받아, 첫 번째 배열에는 있지만 두 번째 배열에는 없는 요소들만 모아 새로운 배열로 반환하는 함수를 작성하는 방법을 알아보겠습니다.두 배열에는 서로 동일한 값이 포함되어 있을 수도 있습니다. 따라서 함수의 핵심 로직은 첫 번째 배열의 각 요소를 순회하면서 해당 요소가 두 번째 배열에 존재하는지 확인하고, 존재하지 않는 요소만 결과 배열에 담는 것입니다.구현 코
문제 소개문자열 배열을 입력받아, 배열에 포함된 문자열들 사이에서 가장 긴 고유 부분 수열(Longest Uncommon Subsequence)을 찾는 자바스크립트 함수를 작성해 보겠습니다.여기서 말하는 고유 부분 수열이란 배열 내 특정 문자열의 부분 수열이면서, 동시에 나머지 다른 어떤 문자열의 부분 수열에도 해당하지 않는 수열을 의미합니다. 참고로 부분 수열(subsequence)은 원본 문자열에서 문자의 순서를 유지한 채 일부 문자를 삭제하여 만들어진 수열을 뜻합니다.함수는 최종적으로 이 가장 긴 고유 부분 수열의 길이를 반환
문제 소개여섯 가지 괄호 문자 (, ), {, }, [, ]만으로 구성된 문자열을 입력받아, 해당 문자열이 유효(valid)한지 판별하는 JavaScript 함수를 작성해 보겠습니다.유효한 문자열의 조건열린 괄호는 반드시 같은 종류의 닫힌 괄호로 닫혀야 합니다.열린 괄호는 올바른 순서대로 닫혀야 합니다.예시() → 유효한 괄호()[]{} → 유효한 괄호(] → 유효하지 않은 괄호 (괄호 종류가 일치하지 않음)접근 방법: 스택(Stack) 활용이 문제는 스택 자료구조를 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과
문제 소개 정수로 이루어진 배열을 인자로 받아, 배열의 모든 요소를 곱한 값을 반환하는 자바스크립트 함수를 작성해 보겠습니다. 이때 지켜야 할 핵심 조건은 두 가지입니다. 반복문이 아닌 재귀(recursion) 방식으로 문제를 해결할 것 배열 내 모든 요소의 곱(product)을 계산하여 반환할 것 입력 및 출력 예시 입력 배열이 다음과 같다고 가정해 보겠습니다. const arr = [1, 3, 6, .2, 2, 5]; 모든 요소를 곱하면 1 × 3 × 6 × 0.2 × 2 × 5 = 36이므로, 기대되는 출력값은 다음과 같
전화 키패드와 알파벳 매핑구형 버튼식 휴대폰에서는 숫자 키마다 알파벳이 다음과 같이 배치되어 있었습니다.const mapping = { 1: [], 2: [a, b, c], 3: [d, e, f], 4: [g, h, i], 5: [j, k, l], 6: [m, n, o], 7: [p, q, r, s], 8: [t, u, v], 9: [w, x, y, z] };흔히 접하는 숫자 조합으로 만들 수 있는 모든 단어 구하기 문제와 반대로, 이번에는 알파벳으로 이루어진 문자열을
아나그램(Anagram)이란?두 문자열이 서로 아나그램 관계에 있다는 것은, 첫 번째 문자열의 글자들을 재배열하거나 순서를 섞어 두 번째 문자열과 완전히 동일한 문자열을 만들 수 있다는 의미입니다.예를 들어 다음 두 단어를 살펴보겠습니다.something과 emosghtin은 같은 글자들로 이루어져 있으므로 서로 아나그램입니다.이번 글에서는 두 개의 문자열 str1과 str2를 입력받아, 두 문자열이 서로 아나그램인 경우 true, 그렇지 않은 경우 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.접근 방식가장 효
문제 소개정수로 이루어진 배열을 입력받아, 서로 인접하지 않은(non-adjacent) 요소들로 구성된 부분집합 중에서 합이 가장 큰 것을 찾는 JavaScript 함수를 작성해야 합니다.마지막으로, 함수는 찾아낸 부분집합의 합을 계산하여 반환해야 합니다.예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [3, 5, 7, 8, 10];이때 기대하는 출력값은 20입니다. 인접하지 않은 요소들만으로 만들 수 있는 최대 합 부분집합은 3, 7, 10이며, 그 합이 3 + 7 + 10 = 20이기 때문입니다.구현 코드이
첫 번째 인수로 문자열 배열을, 두 번째 인수로 하나의 문자열을 받는 JavaScript 함수를 작성해야 합니다.이 함수는 두 번째 인수로 전달된 문자열이 배열에 포함된 문자열들을 어떤 순서로든 조합하여 만들어질 수 있는지 판별해야 합니다.예를 들어, 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [for,car,keys,forth];그리고 검사할 문자열은 다음과 같습니다.const str = forthcarkeys;이 경우 출력값은 true가 되어야 합니다. 해당 문자열은 배열의 3번, 1번, 2번 인덱스에 있
문제 이해하기각각 한 글자짜리 문자들을 담고 있는 n개의 별개 배열이 있다고 가정해 봅시다. 우리는 이 모든 배열을 인수로 받아 처리하는 자바스크립트 함수를 작성해야 합니다.이 함수는 다음 두 가지 조건을 만족하는 모든 가능한 문자열 조합을 생성해야 합니다.각 배열에서 정확히 하나의 문자를 가져와야 합니다.생성된 문자열에는 반복되는 문자가 없어야 합니다. (배열끼리 서로 같은 요소를 포함할 수 있기 때문입니다.)이번 예제에서는 편의상 세 개의 배열을 사용하지만, 작성하는 함수는 배열의 개수와 관계없이 유연하게 동작하도록 만들 것입니
힙 정렬(Heap Sort)은 대표적인 비교 기반 정렬 알고리즘입니다. 개선된 선택 정렬(selection sort)이라고 생각할 수 있는데, 선택 정렬과 마찬가지로 입력 배열을 정렬된 영역과 정렬되지 않은 영역으로 나누고, 정렬되지 않은 영역에서 목표 값(최댓값 또는 최솟값)을 추출해 정렬된 영역으로 옮기는 작업을 반복하며 정렬되지 않은 영역을 점차 줄여 나가는 방식으로 동작합니다.힙 정렬의 동작 원리힙 정렬은 이진 힙(binary heap) 자료구조를 활용합니다. 배열을 완전 이진 트리 형태로 해석한 뒤, 부모 노드가 항상 자식
스택으로 구현하는 후위 표기법(RPN) 계산기란? 자바스크립트의 스택(Stack) 자료구조를 활용해 RPN(Reverse Polish Notation, 후위 표기법) 방식으로 입력된 수식을 계산하는 계산기를 만들어 보겠습니다. 후위 표기법은 연산자가 피연산자 뒤에 오는 표기 방식입니다. 괄호 없이도 연산 순서가 명확하게 결정되기 때문에 컴파일러나 전자계산기의 내부 로직 등 다양한 분야에서 활용되며, 스택을 함께 사용하면 수식을 단 한 번의 순회만으로 평가할 수 있다는 장점이 있습니다. 입력 데이터 다음과 같이 숫자(피연산자)와 연
정수 배열을 입력받아 재귀(recursion)와 배열의 push, pop 메서드만을 활용해 스택을 제자리(in-place)에서 오름차순으로 정렬하는 JavaScript 함수를 작성해 보겠습니다.접근 방식이 문제는 두 개의 재귀 함수를 조합하여 해결할 수 있습니다.1. sortStack 함수: 스택의 최상단 요소를 pop으로 꺼낸 뒤, 남은 스택에 대해 자기 자신을 재귀 호출합니다. 재귀가 모두 끝나면 꺼내둔 요소를 sortedInsert를 통해 올바른 위치에 다시 삽입합니다.2. sortedInsert 함수: 스택이 비어 있거나 삽
이 글에서는 0부터 25 사이(양 끝값 포함)의 숫자를 입력받아 해당 순서의 알파벳 문자를 반환하는 자바스크립트 함수를 작성하는 방법을 소개합니다. 문제 정의 함수는 0~25 범위의 숫자 하나를 인수로 받으며, 각 숫자는 다음과 같이 알파벳에 대응됩니다. 0 → A 1 → B 15 → P 25 → Z 구현 예시 핵심 아이디어는 대문자 A의 아스키(ASCII) 코드 값을 기준점으로 삼고, 여기에 입력받은 숫자를 더한 후 String.fromCharCode() 메서드를 사용해 다시 문자로 변환하는 것입니다. const num = 1