프론트 개발자를 위한 여정

모든 영역을 안내하는 개발자

Algorithm 37

[JS] 문자열 내 각 문자 개수 세기 / Map 사용, Object 사용, reduce 활용 방법 비교

📌 문제주어진 문자열에서 각 문자의 등장 횟수를 계산하여 객체(Map)로 반환하는 함수를 구현하시오.function charCount(str) { // 여기에 코드 작성}console.log(charCount("hello world"));/*출력 예시:{ h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1 }*/ 🔹 코드function charCount(str) { const map = new Map(); const word = str.split(''); for(let i = 0; i  🔎 풀이 과정1️⃣ 문제 접근 방식문자열을 순회하면서 각 문자의 등장 횟수를 세면 됨공백은 무시해야 하므로 if (word[i] === ' ') continue; 처리객체(Ma..

[JS] 배열에서 최솟값과 최댓값 찾기 / 정렬sort, Math.min()&max(), 반복문 방법 비교

📌 문제주어진 배열에서 최솟값과 최댓값을 찾아 배열로 반환하는 함수를 구현하시오.function findMinMax(arr) { // 여기에 코드 작성 }console.log(findMinMax([3, 1, 4, 1, 5, 9, 2, 6])); // [1, 9]  🔹 코드function findMinMax(arr) { arr.sort(); return [arr[0], arr[arr.length - 1]];}console.log(findMinMax([3, 1, 4, 1, 5, 9, 2, 6])); // [1, 9]🔎 풀이 과정1️⃣ 문제 접근 방식배열을 정렬한 후, 첫 번째 값과 마지막 값이 최솟값과 최댓값이므로 이를 반환함.정렬을 사용하는 방식은 직관적이지만, 비효율적인 방법일 수 있..

[JS] FizzBuzz 문제 / 조건문, 문자열누적, Map활용

📌 문제1부터 N까지의 숫자를 출력하되,3의 배수일 경우 "Fizz"5의 배수일 경우 "Buzz"3과 5의 공배수일 경우 "FizzBuzz"그 외의 경우, 숫자를 그대로 출력🔹 코드function fizzBuzz(n) { for (let i = 1; i 🔎 풀이 과정1️⃣ 문제 접근 방식i % 3 === 0 && i % 5 === 0을 먼저 검사해야 한다.그렇지 않으면 i % 3 === 0 또는 i % 5 === 0 조건이 먼저 실행되어 FizzBuzz가 출력되지 않음.시간 복잡도는 O(n)이며, n개의 숫자를 한 번씩 검사한다.🚀 추가적인 해결 방법1️⃣ 문자열 누적 방식function fizzBuzz(n) { for (let i = 1; i ✅ 장점if-else 대신 문자열을 누적하..

[JS] 문자열 뒤집기 / array-reverse, for문, 재귀함수

📌 문제주어진 문자열을 뒤집어서 반환하는 함수를 구현하시오. function reverseString(str) { // 여기에 코드 작성}console.log(reverseString("hello")); // "olleh"🔎 풀이 과정function reverseString(str) { return str.split('').reverse().join('');}console.log(reverseString("hello")); // "olleh"문제 접근 방식문자열을 배열로 변환한 후, reverse() 메서드를 사용하여 순서를 뒤집고 다시 문자열로 결합하는 것이다.문제 해결 과정split('')을 사용하여 문자열을 문자 배열로 변환"hello".split(''); // ['h', 'e', 'l'..

[algorithm 공부] DFS/BFS 쉬운 개념 js 구현 방법

탐색 알고리즘인 DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)에 대해 알아보겠습니다.이 두 알고리즘은 그래프나 트리 구조를 탐색하는 데 매우 유용한 방법입니다.특히, JavaScript를 기준으로 쉽게 구현하는 방법을 살펴보겠습니다.1. DFS와 BFS의 개념 이해DFS는 깊이 우선 탐색으로, 가능한 깊게 노드를 탐색한 후에 더 이상 탐색할 노드가 없으면 이전 노드로 돌아가서 다른 경로를 탐색하는 방식입니다. 반면, BFS는 너비 우선 탐색으로, 시작 노드에서 가까운 노드를 먼저 탐색하고, 그 다음으로 멀리 있는 노드를 탐색하는 방식입니다. 이 두 알고리즘은 각각의 특성에 따라 다양한 상황에서 유용하게 사용됩니다.이미지 출처DFS와 BFS의 탐색 경로를 보여주는 다이어그램입니다.2. DFS와 BFS..

Algorithm 2025.01.06

[프로그래머스] 연습문제 / 미로탈출 / Lv2 / JS / 접근법, 문제풀이 공유

문제 이해하기주어진 문제는 다음과 같습니다:미로는 O(빈칸), X(벽), S(시작점), L(레버), E(출구)로 구성됩니다.S에서 L로, L에서 E로 이동해야 합니다.O만 지나갈 수 있으며, X는 벽이라 지나갈 수 없습니다.최단 거리로 이동하는 방법을 찾는 게 목표입니다.예제 입력["SOOOL", "XXXXO", "OOOOO", "OXXXX", "OOOOE"]​  위 미로에서 우리는 S(0, 0) → L(0, 4) → E(4, 4)로 이동하는 경로를 찾아야 합니다.알고리즘을 어떻게 접근할까?이 문제를 해결하기 위해 두 가지 개념을 사용합니다:1. 미로 탐색2. 최단 거리 찾기최단 거리 탐색에 적합한 BFS최단 거리를 찾기 위해 BFS (Breadth-First Search), 즉 너비 우선 탐색을..

알고리즘 문제에서 자주 쓰이는 Math 함수 완벽 정리

🎯 1. 자주 사용되는 Math 함수와 그 이유다음은 알고리즘 문제에서 자주 등장하는 Math 함수와 많이 사용되는 이유입니다:함수사용 빈도주요 활용 이유Math.abs()★★★★★절댓값 계산: 두 값의 차이 계산, 거리 계산 문제에서 필수적으로 사용됩니다.Math.max()★★★★★최댓값 구하기: 배열 내 최대값 계산이나 여러 값 중 가장 큰 값 찾기에 사용됩니다.Math.min()★★★★★최솟값 구하기: 배열 내 최소값 계산이나 여러 값 중 가장 작은 값 찾기에 사용됩니다.Math.floor()★★★★☆내림값 계산: 정수 연산, 몫 계산, 배수 관련 문제에서 사용됩니다.Math.ceil()★★★★☆올림값 계산: 나누기 연산 후 올림값을 구하거나 필요한 최소값을 계산하는 문제에서 사용됩니다.Math...

Algorithm 2024.11.27

[프로그래머스] PCCP 기출문제 / 1번 동영상 재생기 / Lv1 / JS / 접근법, 코드, 추가테스트케이스

문제 설명당신은 동영상 재생기를 만들고 있습니다. 당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다. 각 기능이 수행하는 작업은 다음과 같습니다.10초 전으로 이동: 사용자가 "prev" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 전으로 이동합니다. 현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동합니다. 영상의 처음 위치는 0분 0초입니다.10초 후로 이동: 사용자가 "next" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 후로 이동합니다. 동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동합니다. 영상의 마지막 위치는 동영상의 길이와 같습니다.오프닝 건너뛰기: 현재 재생 위치가 오프닝 ..

[프로그래머스] 연습문제 / 마법의 엘리베이터 / Lv2 / JS / 접근법

문제 설명마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다.탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특별합니다. 마법의 엘리베이터에는 -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼이 있습니다. 마법의 엘리베이터의 버튼을 누르면 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동하게 됩니다. 단, 엘리베이터가 위치해 있는 층과 버튼의 값을 더한 결과가 0보다 작으면 엘리베이터는 움직이지 않습니다. 민수의 세계에서는 0층이 가장 아래층이며 엘리베이터는 현재 민수가 있는 층에 있습니다.마법의 엘리베이터를 움직이기 위해서 버튼 한 번당 마법의 돌 한 개를 사..

[알고리즘] 순열과 백트래킹 비교(permutation, backtracking) / 부분 수율 / 전체 순열

permutation: 크기가 제한된 부분 순열을 구하는 함수.backtrack: 전체 원소를 포함하는 순열을 구하는 함수.동작의 범위 차이:permutation: 고정된 크기의 조합만 포함.backtrack: 배열의 모든 순열을 포함.사용 상황:permutation: 특정 크기의 부분 조합을 구해야 할 때 사용.backtrack: 전체 순열을 구하거나 탐색이 필요한 경우 사용.비교표함수시간복잡도공간복잡도목적permutationO(n²)O(n²)크기가 제한된 순열 (예: 2개)backtrackO(n * n!)O(n * n!)전체 순열 (길이 n)  순열 생성 범위:permutation은 특정 크기의 순열(여기서는 2개)을 제한적으로 생성하기 때문에, 시간복잡도와 공간복잡도가 비교적 낮습니다.backtra..

Algorithm 2024.11.24