이번 글에서는 문자열과 양의 정수 배열을 입력받아, 각 문자를 지정된 위치로 이동시켜 새로운 문자열을 만드는 자바스크립트 함수를 작성해 보겠습니다.함수는 첫 번째 인자로 문자열(str)을, 두 번째 인자로 문자열과 길이가 같은 양의 정수 배열(arr)을 받습니다. 그리고 섞인 결과 문자열에서 원래 i번째 위치에 있던 문자가 arr[i] 위치로 이동하도록 재배열해야 합니다.문제 예시예를 들어 입력 문자열과 배열이 다음과 같다고 가정해 보겠습니다.const str = example;const arr = [5, 2, 0, 6, 4, 1,
문제 이해하기리터럴 값들로 이루어진 배열을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 배열에는 중복된 값이 많이 포함되어 있을 가능성이 높습니다. 목표는 배열을 정렬하되, 고유한 값 즉 빈도가 가장 낮은 값들은 앞쪽에, 빈도가 가장 높은 값들은 뒤쪽에 배치하는 것입니다.예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [4, 7, 3, 5, 5, 4, 7, 9, 2, 1, 5, 7, 5, 5, 9];그렇다면 출력 배열은 다음과 같아야 합니다.const output = [ 3
이번 글에서는 문장을 첫 번째이자 유일한 인수로 받아, 단어의 길이를 기준으로 재정렬하는 JavaScript 함수를 작성해 보겠습니다.여기서 말하는 문장(sentence)이란 공백으로 구분된 여러 단어가 연결된 문자열을 의미합니다. 함수는 문장 내 단어들을 재배치하여 가장 짧은 단어(글자 수가 가장 적은 단어)가 맨 앞에 오고, 그 뒤로 점점 긴 단어들이 이어지도록 만들어야 합니다.예를 들어 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.const str = this is a string;그렇다면 기대되는 출력 결과는 다음과
이번 글에서는 양의 정수를 인수로 하나만 받아서, 그 숫자보다 바로 다음으로 큰 가장 작은 소수를 찾아 반환하는 JavaScript 함수를 작성해 보겠습니다.문제 정의함수는 첫 번째이자 유일한 인수로 양의 정수를 받습니다. 그리고 이 값보다 큰 수들 중에서 가장 작은 소수를 찾아야 합니다.예를 들어, 입력값이 다음과 같다면:const num = 18;18보다 큰 가장 작은 소수는 19이므로, 출력 결과는 아래와 같아야 합니다.const output = 19;풀이 접근 방식해결 방법은 간단합니다. 입력받은 숫자보다 1 큰 값부터 시작
두 개의 숫자 m과 n을 인수로 받는 JavaScript 함수를 작성해야 합니다.여기서 n은 항상 m이 가진 자릿수보다 작거나 같으며, 함수는 m의 첫 번째 자릿수부터 n번째 자릿수까지의 합을 계산하여 반환해야 합니다.문제 이해하기예를 들어 입력값이 다음과 같다고 가정해 보겠습니다.const m = 5465767; const n = 4;이 경우 기대되는 출력 결과는 다음과 같습니다.const output = 20;그 이유는 숫자 5465767의 앞 네 자리인 5, 4, 6, 5를 더하면 5 + 4 + 6 + 5 = 20이 되기 때문
이번 글에서는 숫자 배열을 첫 번째 인수로, 하나의 숫자를 두 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 이 함수는 배열 안에서 연속적이든 비연속적이든, 세 숫자의 합이 두 번째 인수로 지정한 값과 일치하는 모든 트리플렛(triplet, 세 수 조합)을 찾아 배열 형태로 반환해야 합니다.예를 들어 입력 배열과 목표 숫자가 다음과 같다면 −const arr = [4, 2, 0, 1, 2, 6, 8, 3, 2, 5]; const num = 8;기대되는 출력 결과는 다음과 같습니다 −const
문제 개요정수 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수의 역할은 배열에 존재하지 않는 가장 작은 양의 정수를 찾아 반환하는 것입니다.예를 들어, 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [4, 2, -1, 0, 3, 9, 1, -5];이 경우 기대되는 출력값은 다음과 같습니다.const output = 5;그 이유는 배열에 이미 1, 2, 3, 4가 포함되어 있고, 그중 없는 가장 작은 양의 정수가 바로 5이기 때문입니다. 음수(-1, -5)와 0은 양의
이 글에서는 숫자로 이루어진 2차원 배열과 하나의 숫자를 인수로 받아, 해당 숫자가 배열 안에 존재하는지 판별하는 JavaScript 함수를 작성해 보겠습니다.여기서 다루는 2차원 배열은 다음과 같은 조건을 만족합니다.각 하위 배열(행)은 오름차순으로 정렬되어 있습니다.앞선 하위 배열의 어떤 원소도 뒤따르는 하위 배열의 어떤 원소보다 크지 않습니다. 즉, 모든 행을 한 줄로 펼치면 완전히 정렬된 형태가 됩니다.함수는 이진 탐색(binary search) 알고리즘을 활용해 두 번째 인수로 전달된 값을 검색해야 하며, 값이 존재하면 t
숫자 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.이 함수는 배열에서 요소를 하나 제거했을 때, 홀수 인덱스에 위치한 요소들의 합과 짝수 인덱스에 위치한 요소들의 합이 같아지는 경우를 찾아야 합니다. 그리고 조건을 만족시키기 위해 한 번에 하나씩 요소를 제거할 수 있는 서로 다른 모든 방법의 개수를 세어 반환해야 합니다.문제 이해하기예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [2, 6, 4, 2];이때 출력값은 2가 되어야 합니다. 인덱스 1에 있는 6과 인덱스
정확히 세 가지 고유한 값, 즉 -1, 0, 1만 다양한 빈도로 포함하는 숫자 배열이 있다고 가정해 보겠습니다.const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];이런 배열을 입력으로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 별도의 추가 배열을 사용하지 않고 제자리(in-place)에서 배열을 정렬해야 합니다.여기서 중요한 조건은 함수가 선형 시간(O(n))에 동작해야 한다는 점입니다. 즉, 배열을 딱 한 번만 순회하면서 정렬을 완료해야 합니다.접근 방식: 네덜란드 국기 알고리즘
이 문제에서는 간격(interval)을 두 개의 숫자로 이루어진 배열로 정의하며, 항상 첫 번째 숫자가 두 번째 숫자보다 작아야 합니다.예를 들면 다음과 같습니다.[4, 6], [2, 3], [6, 8], [2, 7], [1, 8]은 모두 유효한 간격의 예입니다.문제 상황시작 시간(각 간격의 첫 번째 요소)을 기준으로 정렬된 간격 배열이 있다고 가정해 보겠습니다. 배열 내 간격들은 서로 겹치지 않습니다(non-overlapping). 즉, 임의의 인접한 두 간격 [m, n]과 [x, y]에 대해 다음 조건이 항상 성립합니다.m &l
문제 개요숫자 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열에 포함된 숫자들을 서로 이어 붙여, 주어진 숫자들로 만들 수 있는 가장 큰 수를 문자열 형태로 반환해야 합니다.예를 들어 입력 배열이 다음과 같다면,const arr = [5, 45, 34, 9, 3];출력 결과는 다음과 같아야 합니다.const output = 9545343;접근 방법이 문제의 핵심은 단순히 숫자의 크기 순으로 정렬하는 것이 아니라, 두 숫자를 이어 붙였을 때 더 큰 값이 되는 순서를 기준으로 정렬하는
문제 개요정수 배열과 두 개의 양의 정수를 인자로 받아, 특정 조건을 만족하는 두 요소의 존재 여부를 판별하는 JavaScript 함수를 작성해 보겠습니다. 함수는 다음 세 가지 인자를 전달받습니다.arr → 정수로 이루어진 배열m → 양의 정수 (허용되는 최대 인덱스 거리)n → 양의 정수 (허용되는 최대 값 차이)함수의 목표는 다음 두 조건을 동시에 만족하는 두 요소 a1과 a2가 배열 안에 존재하는지 확인하는 것입니다.두 값의 절대 차이(|a1 − a2|)가 n 이하일 것두 요소 인덱스의 절대 차이가 m 이하일 것예제 코드다음
어떤 연구자가 일정 기간 동안 발표한 논문들의 피인용 횟수를 나타내는 양의 정수 배열이 있다고 가정해 보겠습니다. 우리는 이 배열을 입력으로 받아, 배열에 담긴 인용 데이터를 바탕으로 해당 연구자의 h-지수(h-index)를 구하는 JavaScript 함수를 작성해야 합니다. h-지수란? 한 연구자가 경력 전체에서 N개의 논문을 발표했다고 할 때, 그중 h개의 논문이 각각 최소 h번 이상 인용되었고, 나머지 N − h개의 논문은 각각 h번 이하로 인용되었다면 이 연구자의 h-지수는 h입니다. 예를 들어 인용 배열이 다음과 같다고 해
이번 글에서는 숫자 배열을 인자로 받아 요소들을 교차(번갈아) 방식으로 재배열하는 JavaScript 함수를 작성해 보겠습니다.교차 정렬이란?여기서 말하는 교차 정렬은 배열의 요소들이 다음과 같은 패턴을 따르도록 배치하는 것을 의미합니다.arr[0] < arr[1] > arr[2] < arr[3]즉, 첫 번째 요소보다 두 번째 요소가 크고, 두 번째 요소보다 세 번째 요소가 작으며, 이런 식으로 크기가 번갈아 나타나는 형태입니다. 하나의 배열에 대해 가능한 결과는 여러 가지일 수 있으며, 우리는 그중 아무거나 하나만
문제 이해하기두 개의 숫자 배열 arr1과 arr2를 인자로 받아, 두 배열에 공통으로 존재하는 모든 요소로 구성된 새로운 배열을 반환하는 JavaScript 함수를 작성해야 합니다.여기서 핵심은 단순히 값의 존재 여부만 확인하는 것이 아니라, 동일한 요소가 양쪽 배열에 여러 번 등장할 경우 그 모든 인스턴스를 결과에 포함해야 한다는 점입니다. 즉, 중복 횟수까지 고려한 교집합(multiset intersection)을 구해야 합니다.예제입력 배열이 다음과 같다고 가정해 보겠습니다.const arr1 = [1, 2, 2, 4, 4,
문제 이해하기이번 문제에서는 문자열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.함수는 문자열에 포함된 문자들을 재배치하여 동일한 두 문자가 서로 인접하지 않도록 만들어야 합니다.만약 그러한 배치가 하나라도 존재한다면 함수는 재배치된 문자열을 반환하고, 불가능하다면 빈 문자열을 반환해야 합니다.예시입력 문자열이 다음과 같다고 가정해 보겠습니다.const str = add;이 경우 함수의 출력은 다음과 같을 수 있습니다.const output = dad;add에서 같은 문자 d가 연속으로 붙어 있지만,
문제 개요숫자 배열을 입력받아 처리하는 JavaScript 함수를 작성해야 합니다. 이 함수에 입력으로 주어지는 배열은 다음과 같은 두 가지 특수한 성질을 가집니다.배열의 길이는 항상 짝수입니다.배열 안의 짝수 개수와 홀수 개수는 항상 서로 같습니다(즉, 둘 다 배열 길이의 절반과 동일합니다).함수는 배열의 요소들을 재배치하여 모든 짝수 값은 짝수 인덱스(0, 2, 4...)에, 모든 홀수 값은 홀수 인덱스(1, 3, 5...)에 위치하도록 만들어야 합니다.참고로 이 문제에는 정답이 여러 개 존재할 수 있으며, 그중 어떤 것이든 하
이번 글에서는 ASCII 숫자를 나타내는 문자열을 입력받아, 각 문자에 해당하는 16진수(hexadecimal) 코드로 변환한 뒤 그 결과를 반환하는 JavaScript 함수를 작성해 보겠습니다.예를 들어 입력된 ASCII 문자열이 다음과 같다고 가정해 보겠습니다.const str = 159;이 경우 각 문자의 아스키 코드를 16진수로 변환하면 결과는 313539가 되어야 합니다. (1 → 31, 5 → 35, 9 → 39)구현 예제다음은 이를 구현한 코드입니다. { const res = []; const { length
문자열을 입력받아 원본 문자열에서 알파벳이 아닌 모든 문자를 제거한 새로운 문자열을 생성하고 반환하는 JavaScript 함수를 작성해야 합니다. 단, 문자열에 공백이 포함되어 있다면 공백은 제거하지 않고 그대로 유지해야 합니다.예시입력 문자열이 다음과 같다면 −const str = he@656llo wor?ld;출력 문자열은 다음과 같아야 합니다 −const output = hello world;구현 방법이 문제를 해결하는 핵심 아이디어는 각 문자가 알파벳인지 또는 공백인지 판별하는 것입니다. 알파벳 문자는