소문자 또는 대문자로만 구성된 문자열 s가 주어졌을 때, 이 문자열에 포함된 글자들을 조합하여 만들 수 있는 가장 긴 회문(palindrome)의 길이를 반환하는 문제입니다. 단, 대소문자는 서로 구분해야 하므로 예를 들어 Aa는 회문으로 간주하지 않습니다.문제 예시입력 문자열이 다음과 같다고 해봅시다.const str = abccccdd;이 경우 출력값은 7이어야 합니다. 그 이유는 주어진 글자들로 만들 수 있는 가장 긴 회문이 dccaccd이며, 그 길이가 정확히 7이기 때문입니다.접근 방법회문은 좌우가 대칭을 이루는 문자열입니
숫자로 이루어진 배열을 인자로 받아, 그중 세 번째로 큰 숫자를 찾아 반환하는 JavaScript 함수를 작성해 보겠습니다.이 문제의 핵심 조건은 함수의 시간 복잡도가 O(n)을 초과해서는 안 된다는 것입니다. 즉, 정렬 없이 배열을 단 한 번만 순회하면서 세 번째 최댓값을 찾아내야 합니다.접근 방식핵심 아이디어는 최댓값(first), 두 번째 값(second), 세 번째 값(third)을 저장할 변수 세 개를 준비하는 것입니다. 처음에는 세 변수를 모두 -Infinity로 초기화한 뒤, 배열의 각 요소를 순회하면서 값의 크기를 비
이번 글에서는 주어진 정수의 비트(bit) 순서를 거꾸로 뒤집는 자바스크립트 프로그램을 작성해 보겠습니다.예를 들어 다음과 같습니다. 111000 111또 다른 예시입니다. 11101010 1010111접근 방식가장 간단하고 직관적인 방법은 숫자를 2진수 문자열로 변환한 뒤, 문자열의 순서를 뒤집고, 이를 다시 10진수 정수로 되돌리는 것입니다. 구체적인 단계는 다음과 같습니다.toString(2) 메서드를 사용해 숫자를 2진수 문자열로 변환합니다.split()으로 문자열을 개별 문자 배열로 나눈 후 reverse()로 순서를 뒤집
이번 글에서는 숫자 배열을 첫 번째 인수로, 하나의 숫자를 두 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다.이 함수는 배열 전체를 탐색하여 두 번째 인수로 전달된 숫자와 일치하는 모든 요소를 찾은 뒤, 해당 요소들을 배열의 맨 뒤로 이동시켜야 합니다. 일치하지 않는 나머지 요소들은 원래의 상대적인 순서를 그대로 유지합니다.문제 예시입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [1, 5, 6, 6, 5, 3, 3];두 번째 인수로 숫자 6을 전달하면, 값이 6인 모든 요소가 배열의 끝으로 밀려나
완전수란 무엇인가?완전수(Perfect Number)는 자기 자신을 제외한 모든 양의 약수의 합이 자기 자신과 같은 양의 정수를 말합니다. 여기서 약수(divisor)란 어떤 정수 x를 나누어 떨어지게 하는 정수를 의미합니다.예를 들어 다음과 같습니다.28은 완전수입니다. 28 = 1 + 2 + 4 + 7 + 14이 글에서는 숫자 n을 입력받아 n이 완전수인지 아닌지를 판별하는 자바스크립트 함수를 작성해 보겠습니다.구현 예제 { if(num === 1) { return false; }; let s
다음과 같이 배열 안에 여러 개의 하위 배열이 담긴 2차원 배열이 있다고 가정해 보겠습니다. const arr = [ [A,F,A,H,F,F], [F,A,A,F,F,H] ]; 이번 글에서는 이러한 배열을 입력으로 받아 지정된 규칙에 따라 정렬하는 자바스크립트 함수를 작성해 보겠습니다. 정렬 규칙 함수는 주어진 배열의 모든 하위 배열을 아래 규칙에 따라 내부적으로 정렬해야 합니다. A 또는 F가 아닌 요소(예: H)는 반드시 원래 위치를 그대로 유지해야 합니다. A와 F끼리는 알파벳순으로, 즉 A가 항상 F보다 앞에 오도록
JavaScript로 개발하다 보면 여러 개의 배열에 나뉘어 저장된 데이터를 하나의 객체 배열로 합쳐야 하는 경우가 자주 있습니다. 예를 들어 다음과 같이 세 개의 숫자 배열이 있다고 가정해 보겠습니다.const code = [123, 456, 789]; const year = [2013, 2014, 2015]; const period = [3, 4, 5];여기서 우리가 만들어야 할 것은 이 세 배열을 인자로 받아, 각 배열의 같은 인덱스에 있는 값들을 하나의 객체로 묶어 새로운 객체 배열을 반환하는 함수입니다. 즉, 각 배열을 열
데이터 처리 작업을 하다 보면 부모-자식 관계가 평면적인(flat) 객체 배열로 표현된 데이터를 계층적인 트리 구조로 변환해야 하는 경우가 자주 발생합니다. 이번 글에서는 다음과 같은 객체 배열이 주어졌을 때 이를 트리 구조의 JSON으로 변환하는 방법을 알아보겠습니다.const arr = [ { parentIndex: 0 , childIndex: 3 , parent: ROOT, child: root3 }, { parentIndex: 3 ,
문제 상황다음과 같이 숫자로 이루어진 중첩 배열(nested array)이 있다고 가정해 보겠습니다.const arr = [23, 6, [2, [6, 2, 1, 2], 2], 5, 2];이 배열의 모든 요소(숫자)를 화면에 출력하는 프로그램을 작성해야 합니다. 핵심 조건은 숫자가 중첩된 깊이(level)에 따라 들여쓰기가 적용된 형태로 출력되어야 한다는 점입니다.따라서 위 입력값에 대한 출력 결과는 다음과 같아야 합니다.236 2  
문제 상황여러 학생(student) 객체를 담고 있는 배열이 있다고 가정해 보겠습니다. 각 학생 객체는 여러 속성을 가지며, 그중 하나는 grades라는 이름의 점수 배열입니다.const arr = [ { name: Student 1, grades: [65, 61, 67, 70] }, { name: Student 2, grades: [50, 51, 53, 90] }, { name: Student 3, grades: [0, 20, 40, 60] } ];이제 이 배열을 순
다음과 같은 객체가 있다고 가정해 보겠습니다. const obj = { "part1": [{"id": 1, "a": 50},{"id": 2, "a": 55},{"id": 4, "a": 100}], "part2":[{"id": 1, "b": 40}, {"id": 3, "b": 45}, {"id&quo
문제 상황다음과 같이 시간 정보를 담고 있는 객체 배열이 있다고 가정해 보겠습니다.const arr = [ {time:18:00:00}, {time:10:00:00}, {time:16:30:00} ];이러한 배열을 입력으로 받아 아래 작업을 수행하는 JavaScript 함수를 작성해야 합니다.JSON 데이터에서 시간 값을 추출합니다. 예: 18:00:00, 10:00:00, 16:30:00시간을 [18, 0], [10, 0], [16, 30]과 같은 형태로 변환합니다.변환된 값들을 하나의 배열에 담습니다.최종
자바스크립트를 다루다 보면 여러 겹으로 중첩된 JSON 객체 안에서 특정 키(key)와 값(value)의 조합을 만족하는 객체를 찾아야 하는 경우가 종종 있습니다. 이 글에서는 재귀 함수를 활용해 임의의 깊이까지 객체를 탐색하고, 조건에 맞는 모든 객체를 배열로 수집하는 방법을 알아보겠습니다.문제 상황다음과 같이 객체 안에 객체가, 그리고 배열 안에 객체가 중첩된 JSON 구조가 있다고 가정해 보겠습니다.const obj = { id: 1, title: hello world, child: { id
다음과 같이 중첩된 JSON 객체가 있다고 가정해 보겠습니다.const obj = { "context": { "device": { "localeCountryCode": "AX", "datetime": "3047-09-29T07:09:52.498Z"
JavaScript로 개발을 하다 보면 한 배열의 요소들을 다른 배열에 나타난 순서대로 재정렬해야 하는 경우가 종종 있습니다. 예를 들어, 데이터 목록을 사용자가 지정한 우선순위 순서에 맞춰 표시해야 할 때가 대표적입니다.문제 상황다음과 같은 두 개의 배열이 있다고 가정해 보겠습니다.const input = [S-1,S-2,S-3,S-4,S-5,S-6,S-7,S-8]; const sortingArray = [S-1, S-5, S-2, S-6, S-3, S-7, S-4, S-8];여기서 우리는 두 개의 배열을 각각 첫 번째, 두 번째
이번 글에서는 반복되는 요소가 포함될 수 있는 숫자 배열을 입력받아, 배열 안에서 가장 길게 연속으로 반복되는 숫자 시퀀스의 길이를 반환하는 JavaScript 함수를 작성해 보겠습니다. 문제 정의 예를 들어, 다음과 같은 입력 배열이 주어졌다고 가정해 봅시다. const arr = [2, 1, 1, 2, 3, 3, 2, 2, 2, 1]; 이 경우 기대하는 출력값은 3입니다. 숫자 2가 배열 끝부분에서 연속으로 세 번 나타나며, 이것이 배열 전체에서 가장 긴 연속 반복 횟수이기 때문입니다. 참고로 숫자 1은 두 번씩 반복되지만 연속
배열의 배열(2차원 배열)을 입력으로 받아, 그 좌표들이 모두 한 직선 위에 있는지 판별하는 JavaScript 함수를 작성해 보겠습니다. 각 하위 배열은 정확히 두 개의 요소를 가지며, 각각 x 좌표와 y 좌표를 나타냅니다.예를 들어 다음과 같습니다.[[4, 5], [5, 6]] → true 반환입력 배열에는 최소 두 개의 하위 배열이 포함되어 있다고 가정합니다.기본 아이디어여러 점이 한 직선 위에 있다면, 첫 번째 점을 기준으로 계산한 나머지 점들까지의 기울기(slope)가 모두 동일해야 합니다. 따라서 첫 점과 각 점 사이의
문자열의 힘이란? 문자열의 힘(power)은 오직 하나의 고유한 문자로만 이루어진 비어 있지 않은 부분 문자열 중 가장 긴 길이를 의미합니다. 쉽게 말해, 같은 문자가 연속해서 반복되는 구간 중 최대 길이를 찾는 것이죠. 이번 글에서는 문자열을 인수로 받아 해당 문자열의 힘을 반환하는 자바스크립트 함수를 작성해 보겠습니다. 예시 예를 들어 다음과 같은 문자열이 있다고 가정해 봅시다. const str = abbcccddddeeeeedcba 이 문자열에 대한 함수의 출력 결과는 5가 되어야 합니다. 그 이유는 부분 문자열 eeeee
문제 개요이번 글에서는 일(day), 월(month), 연도(year) 세 가지 인수를 받아 해당 날짜가 무슨 요일인지 계산하는 JavaScript 함수를 만들어 보겠습니다.예를 들어 다음과 같은 입력이 주어졌을 때 −day = 15,month = 8,year = 1993출력 결과함수는 아래와 같은 결과를 반환해야 합니다 −const output = Sunday; // 일요일구현 코드const dayOfTheWeek = (day, month, year) => { // JS의 월(mont
자바스크립트로 개발을 하다 보면 배열에 담긴 여러 객체를 특정 속성(키)을 기준으로 묶어야 하는 경우가 자주 발생합니다. 예를 들어, 아래와 같이 자동차 정보를 담고 있는 객체 배열이 있다고 가정해 보겠습니다.const arr = [ { make: audi, model: r8, year: 2012 }, { make: audi, model: rs5, year: 2013 }, { make: ford, model: mustang, year: 2012 }, {