프론트 개발자를 위한 여정

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

Algorithm/코테준비 12

JavaScript 자료형별 반복문과 형변환 정리

알고리즘 문제를 풀다 보면 다양한 데이터 타입을 마주하게 됩니다.특히 Array, Object, Map, Set은 자주 사용되며,타입마다 반복하는 방식과 형변환 방법이 다르기 때문에 정리해 두는 것이 중요합니다.이 글에서는 각 타입별 반복 방식과 타입 간 형변환 예제를 정리해봅니다.📌 1. Array (배열)✅ 반복문const arr = [1, 2, 3];// forfor (let i = 0; i { console.log(idx, val);}); 📌 2. Object (객체)✅ 반복문const obj = { a: 1, b: 2, c: 3 };// for...infor (const key in obj) { console.log(key, obj[key]);}// Object.keysObject.ke..

[DFS 문제] 그래프 탐색 / 연결 요소의 개수 찾기

그래프 탐색 (예상 소요 시간: 15~20분) 🔹 문제: 연결 요소의 개수 찾기  N개의 노드와 M개의 간선이 있는 무방향 그래프에서 연결 요소(연결된 노드 집합)의 개수를 구하시오. 입력 예시:console.log(solution(6, [ [0, 1], [0, 2], [3, 4]])); // 출력: 3  풀이6개의 노드가 있고, 간선으로 연결된 노드는 아래와 같다:0-1-2 (하나의 연결 요소)3-4 (두 번째 연결 요소)5는 독립적으로 존재 (세 번째 연결 요소)방문하지 않은 노드부터 DFS나 BFS를 시작하고, 그 노드와 연결된 모든 노드를 탐색한다.각 연결 요소를 찾을 때마다 연결 요소 개수를 증가시킨다.function solution(n, edges) { let coun..

[DFS 문제] 경로 탐색(미로 탐색, 최단 경로)

난이도 2 - 경로 탐색 (예상 소요 시간: 10~15분) 🔹 문제: 미로 탐색N x M크기의 미로가 주어진다. (1,1)에서 시작해 (N,M)으로 가는 최단 경로를 DFS로 탐색하여 출력하시오.벽(0)과 길(1)로 이루어져 있으며, 상하좌우로 이동 가능하다. 입력 예시:4 4 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 출력 예시:최단 거리: 7 // 0,0 -> 4,4  console.log(solution(5, 5, [ [1, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1]])); // 예상 결과: 9console.log(solution(4, 4, [ ..

[DFS 문제 LV1] 숫자 삼각형 탐색 문제/코드

난이도 1 - 기본 탐색 (예상 소요 시간: 5~10분)🔹 문제: 숫자 삼각형 탐색 n개의 줄로 이루어진 숫자 삼각형이 주어진다. 가장 위에서 시작해서 아래로 이동하며 합이 최대가 되는 경로를 찾으시오.단, 한 번에 아래층의 바로 아래나 오른쪽 아래로만 이동할 수 있다. 입력 예시:3 7 3 8 8 1 0  출력 예시: 최대 합: 18 (7 → 8 → 3) 문제 설명숫자로 이루어진 삼각형이 주어졌을 때, 위에서 아래로 이동하면서 얻을 수 있는 최대 합을 구하는 문제.단, 이동할 때는 바로 아래 또는 오른쪽 아래로만 갈 수 있어. 입력 예제 2 4 4 2 3 3 6 1 8 2 7 4출력 예제 2 최대 합: 18 (4 → 3 → 6 → 7)경로 설명4 (첫 번째 줄)3 (두 번째 줄, 선택 가..

[JS] 동적 계획법 (DP)문제 / 중복계산방지, O(n)

🚀 문제n개의 계단을 오를 때, 한 번에 1계단 또는 2계단을 오를 수 있다. 계단을 오르는 방법의 수를 반환하는 함수를 작성하시오.function climbStairs(n) { // 여기에 코드 작성}console.log(climbStairs(5)); // 8🔹 코드function climbStairs(n) { if(n  📌 동적 계획법 (DP)🔎 1️⃣ 문제가 묻는 것동적 계획법(DP)은 복잡한 문제를 여러 개의 작은 문제로 나누어 푸는 알고리즘 설계 기법입니다. 보통 최적화 문제나 계산을 효율적으로 해결해야 할 문제에서 유용하게 사용됩니다. 주로 두 가지 방식인 탑다운(Top-Down) 방식과 바텀업(Bottom-Up) 방식으로 구현할 수 있습니다.✅ 핵심 개념:문제 분할:문제를 더 ..

[JS] 탐색 알고리즘 (이진 탐색) / 반복문, 재귀함수 함수비교

🚀 문제정렬된 배열에서 특정 값을 찾는 이진 탐색 알고리즘을 구현하시오.function binarySearch(arr, target) { // 여기에 코드 작성}console.log(binarySearch([1, 3, 5, 7, 9, 11], 5)); // 2🔹 코드function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left 📌 이진 탐색 문제🔎 1️⃣ 문제가 묻는 것이진 탐색 문제에서 요구하는 것은 정렬된 배열에서 특정 값을 효율적으로 찾는 방법입니다. 이진 탐색은 배열을 반씩 나누어가며 탐색을 진행하므로 시간 복잡도를 O(log N)로 줄일 수 있습니다. 문제는 일반적으로 배..

[JS] 피보나치 수 반환 / 재귀함수, 반복문, 시간복잡도,공간복잡도 비교

🚀 문제재귀를 사용하여 n번째 피보나치 수를 반환하는 함수를 작성하시오.function fibonacci(n) { // 여기에 코드 작성}console.log(fibonacci(10)); // 55🔹 코드function fibonacci(n) { if (n === 0) return 0; if (n === 1) return 1; return fibonacci(n - 1) + fibonacci(n - 2);}console.log(fibonacci(10)); // 55📌 피보나치 수열 문제🔎 1️⃣ 문제가 묻는 것일반적으로 코딩 테스트에서 피보나치 수열을 반환하는 문제는 다음을 요구할 가능성이 큽니다:✅ 정의:fibonacci(n) 함수는 n번째 피보나치 수를 반환해야 한다.피보나치 ..

[JS] 버블 정렬 (Bubble Sort) / 버블 정렬, 최적화 버블 정렬, 내장 sort()

🚀 문제주어진 배열을 버블 정렬 (Bubble Sort) 알고리즘을 이용하여 오름차순으로 정렬하시오.function bubbleSort(arr) { // 여기에 코드 작성}console.log(bubbleSort([5, 3, 8, 4, 2])); // [2, 3, 4, 5, 8]🔹 코드function bubbleSort(arr) { for (let i = 0; i arr[j + 1]) { const temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } console.log(arr); } } return ..

[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️⃣ 문제 접근 방식배열을 정렬한 후, 첫 번째 값과 마지막 값이 최솟값과 최댓값이므로 이를 반환함.정렬을 사용하는 방식은 직관적이지만, 비효율적인 방법일 수 있..