배열 안에 중복된 값들이 섞여 있을 때, 같은 값을 가진 요소들을 하나의 하위 배열로 묶어서 새로운 배열을 반환하는 함수가 필요한 경우가 있습니다.문제 정의예를 들어 다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.const arr = [234, 65, 65, 2, 2, 234];이때 동일한 값끼리 그룹화한 결과는 다음과 같아야 합니다.const output = [[234, 234], [65, 65], [2, 2]];해결 접근 방식이 문제는 해시맵(객체)을 활용하면 효율적으로 해결할 수 있습니다. 해시맵에는 이미 등장한 각 값이
이번 문제는 숫자 또는 문자열 리터럴로 이루어진 배열을 입력받아, 추가 메모리 공간을 사용하지 않고 연속으로 중복되는 요소들을 모두 제거하는 함수를 작성하는 것입니다.문제 예시예를 들어, 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [17, 17, 17, 12, 12, 354, 354, 1, 1, 1];이때 기대하는 출력 결과는 다음과 같습니다. 연속해서 반복된 값은 하나만 남기고 제거됩니다.const output = [17, 12, 354, 1];재귀를 활용한 해결 방법추가 배열을 만들지 않고 제자리(in-p
교차 셔플(Alternative Shuffle)이란?JavaScript에서 교차 셔플된 배열이란, 요소들이 가장 큰 숫자 다음에 가장 작은 숫자, 두 번째로 큰 숫자 다음에 두 번째로 작은 숫자가 오는 방식으로 번갈아 배치된 숫자 배열을 의미합니다.예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [11, 7, 9, 3, 5, 1, 13];이 경우 기대되는 출력 결과는 다음과 같습니다.const output = [13, 1, 11, 3, 9, 5, 7];출력 배열을 자세히 보면 13(최댓값) → 1(최솟값
JavaScript로 개발하다 보면 배열의 특정 자리에 요소를 삽입해야 하는 상황이 자주 생깁니다. 이번 글에서는 배열 안에서 첫 번째 falsy(거짓 같은) 값이 있는 인덱스를 찾아 그 자리에 새 요소를 끼워 넣는 pushAtFalsy() 함수를 직접 만들어 보겠습니다. 요구 사항 정리 함수는 삽입할 요소 하나를 인자로 받으며, 호출된 배열(this)에 직접 반영합니다. 배열을 처음부터 순회하면서 가장 먼저 만나는 falsy 값(빈 슬롯, null, false, undefined 등)의 인덱스를 찾습니다. 찾은 인덱스의 값을
문제 상황이번 글에서는 숫자로 이루어진 배열을 입력받아, 원본 배열에서 인접한 두 요소의 합을 새로운 배열의 요소로 담아 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어, 입력 배열이 다음과 같다면 −const arr = [3, 6, 3, 87, 3, 23, 2, 2, 6, 8];첫 번째와 두 번째 요소(3+6), 세 번째와 네 번째 요소(3+87)의 합을 차례대로 계산하므로 출력 결과는 다음과 같아야 합니다 −const output = [9, 90, 26, 4, 14];예제 코드다음은 해당 기
다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];우리는 이 배열에서 연속된 비음수(양수 또는 0) 숫자들의 그룹, 즉 클러스터가 몇 개인지 세는 JavaScript 함수를 작성해야 합니다.위 배열을 예로 들면, 인덱스 3의 값 0이 하나의 클러스터를 이루고(요소가 하나뿐이라도 하나의 그룹으로 간주합니다), 인덱스 9부터 배열 끝까지의 0, 1, 0이 두 번째 클러스터를 이룹니다.따라서 이 배열에 대해 함수는 2를 반환해야 합니다.해결 아이디어핵심 로
두 개의 배열이 주어졌을 때, 두 배열의 교집합을 계산하여 공통 요소들을 담은 배열을 반환하는 함수(예: intersection())를 작성해야 합니다. 결과 배열의 각 요소는 두 배열에 나타난 횟수만큼 포함되어야 하며, 요소의 순서는 상관없습니다.문제 예시예를 들어 다음과 같은 입력이 있다고 가정해 보겠습니다.arr1 = [hello, world, how, are, you]; arr2 = [hey, world, can, you, rotate];두 배열에 공통으로 존재하는 요소는 world와 you이므로, 출력은 다음과 같아야 합니
이번 글에서는 문자열 또는 숫자로 이루어진 배열 arr를 첫 번째 인수로, 숫자 n을 두 번째 인수로 받는 함수를 작성해 보겠습니다.이 함수는 n개의 하위 배열(subarray)을 반환해야 하며, 각 하위 배열은 최대 arr.length / n개의 요소를 가집니다. 요소의 분배 방식은 다음과 같습니다.첫 번째 요소는 첫 번째 하위 배열에, 두 번째 요소는 두 번째 하위 배열에, 세 번째 요소는 세 번째 하위 배열에 순서대로 들어갑니다.모든 하위 배열에 요소가 하나씩 배치되면, 다시 첫 번째 하위 배열부터 두 번째 요소를 채우기 시작
중복된 숫자가 포함된 배열을 입력받아, 같은 값끼리 하나로 합쳐 합계를 계산하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다.문제 정의예를 들어 입력 배열이 다음과 같다면,const input = [1, 3, 1, 3, 5, 7, 5, 4];출력은 다음과 같아야 합니다.const output = [2, 6, 10, 7, 4];즉, 중복된 1은 첫 번째 위치에서 2로 합산되고, 중복된 3은 그다음 위치에서 6으로 합산되는 식입니다. 각 고유 값은 처음 등장한 순서를 유지한 채, 해당 값들이 모두 더해진 합계로 대체됩니
이번 글에서는 length 속성에 접근하지 않고, 어떠한 내장 반복문도 사용하지 않은 채 배열의 가운데 요소를 반환하는 함수 midElement()를 작성해 보겠습니다. 요구 조건은 다음과 같습니다. 배열의 요소 개수가 홀수라면 → 정확히 가운데 있는 하나의 요소를 반환 배열의 요소 개수가 짝수라면 → 가운데 두 개의 요소를 담은 배열을 반환 예제 코드 const arr = [14, 32, 36, 42, 45, 66, 87]; const array = [13, 92, 83, 74, 55, 46, 74, 82]; const mid
문제 정의 배열에 들어 있는 숫자들 중에서 주어진 기준 값보다 작은 요소와 그 이상인 요소가 각각 몇 개인지 세는 함수를 작성해야 합니다. 먼저 다음과 같은 숫자 배열이 있다고 가정해 보겠습니다. const array = [54,54,65,73,43,78,54,54,76,3,23,78]; 예를 들어 기준 값이 60이라면, 이보다 작은 요소는 아래와 같이 총 7개입니다. 54, 54, 43, 54, 54, 3, 23 반대로 60 이상인 요소(par)는 다음과 같이 5개입니다. 65, 73, 78, 76, 78 구현 코드 배열 메서드
문제 상황두 개의 숫자 배열이 다음과 같이 주어졌다고 가정해 보겠습니다.const arr1 = [12, 54, 2, 4, 6, 34, 3];const arr2 = [54, 2, 5, 12, 4, 1, 3, 34];두 배열 중 한쪽에만 존재하고 양쪽 모두에는 속하지 않는 요소, 즉 수학적으로 말하는 대칭 차집합(symmetric difference)에 해당하는 값들을 반환하는 JavaScript 함수를 작성해야 합니다.위 예시에서 두 배열에 공통으로 포함된 숫자는 12, 54, 2, 4, 3, 34입니다. 따라서 최종 결과에는 첫 번
다음과 같이 true와 false 값으로 이루어진 2차원 배열(배열의 배열)이 있다고 가정해 보겠습니다.const arr = [[true,false,false],[false,false,false],[false,false,true]];여기서 필요한 것은 각 하위 배열에서 같은 위치에 있는 요소들을 AND(&&) 연산자로 결합하여, 이 배열의 배열을 하나의 1차원 배열로 병합하는 함수입니다.접근 방법이 문제는 Array.prototype.reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. reduce()는 배
문제 개요숫자 n을 입력받아, n 이하의 모든 소수를 담은 배열을 반환하는 자바스크립트 함수를 작성해야 한다고 가정해 보겠습니다.예를 들어 n이 24라면, 24 이하의 소수 목록은 다음과 같습니다.const output = [2, 3, 5, 7, 11, 13, 17, 19, 23];접근 방법이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.소수 판별: 특정 수가 소수인지 확인하는 함수를 만듭니다. 2부터 해당 수의 절반까지 차례대로 나누어 보고, 하나라도 나누어 떨어지는 수가 있으면 소수가 아닙니다.범위 탐색: 2부터 n까지의
자바스크립트에서는 간단한 작업을 수행하는 함수를 작성하는 경우가 많습니다. 예를 들어 두 숫자를 더하거나 난수를 생성하는 작업 등이 있습니다. 이때 흔히 마주치는 문제 중 하나는 함수 내부에서 선언된 변수를 외부의 다른 함수나 전역 범위에서 어떻게 접근할 수 있는가입니다. 접근 방법: this 객체 활용하기 함수 내부에서 선언된 지역 변수는 기본적으로 외부에서 접근할 수 없습니다. 하지만 생성자 함수 내부에서 this 키워드를 사용해 값을 인스턴스 속성으로 할당하면, 함수 실행이 끝난 후에도 new 키워드로 생성한 인스턴스를 통해
문제 이해하기같은 길이를 가진 숫자 배열 두 개를 인자로 받아, 첫 번째 배열의 앞에서부터 n번째 요소와 두 번째 배열의 뒤에서부터 n번째 요소를 더한 값으로 구성된 새로운 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.예시예를 들어 다음과 같은 두 개의 배열이 있다고 가정해 보겠습니다.const arr1 = [34, 5, 3, 3, 1, 6];const arr2 = [5, 67, 8, 2, 6, 4];이 경우 기대되는 출력 결과는 다음과 같습니다.const output = [38, 11, 5, 11, 68, 11];
일반적으로 자바스크립트에서는 parseInt()나 parseFloat() 같은 내장 함수를 사용해 문자열 형태의 숫자를 Number 타입으로 변환합니다. 하지만 이러한 메서드는 문자열 중간중간 무작위 위치에 숫자가 섞여 있는 경우에는 제대로 작동하지 않습니다. 예를 들어 아래 코드는 454만 반환할 뿐, 우리가 원하는 값인 4545453을 얻지 못합니다. parseInt(454ffdg54hg53) 따라서 이런 문자열을 입력받아 안에 포함된 모든 숫자를 순서대로 이어 붙인 정수를 반환하는 자바스크립트 함수를 직접 작성해야 합니다. 예
ASCII 코드란?ASCII는 7비트 문자 인코딩 방식으로, 각 비트 조합이 하나의 고유한 문자를 나타냅니다.영어 알파벳의 모든 문자는 각각 고유한 십진수 ASCII 코드 값을 가지고 있습니다. 예를 들어 대문자 A는 65, 소문자 a는 97입니다.이번 글에서는 문자열을 입력받아 해당 문자열에 포함된 모든 문자의 ASCII 코드 값을 합산한 점수를 반환하는 자바스크립트 함수를 작성해 보겠습니다.구현 예제다음은 문자열의 ASCII 점수를 계산하는 코드입니다 −const str = This string will be used
문자열을 입력받아 각 단어를 길이가 짧은 순서(오름차순)대로 재배열한 새로운 문자열을 반환하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다.이 문제는 다음과 같은 순서로 해결할 수 있습니다.해결 접근 방식문자열을 공백( ) 기준으로 분리하여 단어 배열을 만듭니다.sort() 메서드와 비교 함수를 사용해 단어를 길이순으로 정렬합니다.정렬된 배열을 다시 공백으로 연결하여 하나의 문자열로 반환합니다.예제 코드다음은 실제 구현 코드입니다. { return a.length - b.length; }); retur
문제 소개0과 1로만 구성된 숫자 배열이 주어졌을 때, 이 배열을 받아 모든 1은 앞쪽으로, 모든 0은 뒤쪽으로 보내는 JavaScript 함수를 작성한다고 가정해 보겠습니다.예를 들어 입력 배열이 다음과 같다면,const arr = [1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1];출력 결과는 다음과 같아야 합니다.const output = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];기본 풀이 코드배열의 각 요소를 순회하면서, 값이 0이면 새 배열 끝에 추가(push)하고, 값이 1이면 앞쪽에 삽입(u