JS
-
[백준 알고리즘/JavaScript] 1000번 A + B (Feat. 입력받기)IT Study/백준 알고리즘 2023. 12. 14. 13:01
처음으로 JavaScript로 백준을 풀이하기에 앞서, 입력받는 것부터 확인해 보도록 하죠. 1. 하나의 값 입력받기 // ex) 2 (하나의 값을 입력받을 때) const fs = require('fs'); const input = fs.readFileSync("/dev/stdin").toString().trim(); 2. 여러 값 입력받기 2-1. 한 줄에 공백으로 구분된 여러 값을 입력받기 // ex) 10 21 3 (한 줄에 공백으로 구분된 여러 값을 입력받을 때) const fs = require('fs'); const input = fs.readFileSync("/dev/stdin").toString().trim().split(" "); 2-2. 여러 줄에 줄 바꿈으로 구분된 여러 값을 입력받..
-
[프로그래머스/JavaScript] 튜플 (Feat. replace?, Set?)IT Study/프로그래머스 2023. 12. 3. 18:57
위 문제 풀이 시작합니다. 👿 1. 문제 접근 "일단 저 요상한 데이터 형식을 배열 안의 배열 형식으로 바꿔야겠다!" 고 생각했습니다. (1) 맨 앞, 맨 뒤에 중괄호 2개를 빼자. {{2},{2,1},{2,1,3},{2,1,3,4}} → 2},{2,1},{2,1,3},{2,1,3,4 (2) 모든 { 를 빼자. 2},{2,1},{2,1,3},{2,1,3,4 → 2},2,1},2,1,3},2,1,3,4 (3) `},`가 마치 / (슬래시)와 같이 문자들을 구분해주니, 이 구분자를 기준으로 문자열을 분할하여 배열에 담자. 2},2,1},2,1,3},2,1,3,4 → [ '2', '2,1', '2,1,3', '2,1,3,4' ] (4) 분할된 문자열의 배열을 배열 안의 배열로 변환하자. [ '2', '2,1'..
-
[프로그래머스/JavaScript] 타겟 넘버 (Feat. DFS.. 재귀함수.. 너 뭔데)IT Study/프로그래머스 2023. 12. 1. 14:01
이 문제를 처음 봤을 때에는 어떻게 접근해야 할지 도무지 감이 오지 않았습니다. DFS, BFS를 제 손으로 구현해본 적이 없었기에 더욱 주춤하게 되는 문제였는데요. 문제를 풀어낸 과정에 대해 블로그 글로 정리하고자 합니다. 1. 무지성으로 들이대기 function solution(numbers, target) { var answer = 0; // 1. total (numbers 합계) 구하기 const total = numbers.reduce((accVal, curVal) => { return accVal + curVal; }) // 2. purpose ((total - target) / 2) 구하기 const purpose = (total - target) / 2; // 3. numbers 내에서 합..
-
[알고리즘] DFS, BFS 탐색 알고리즘 (Feat. JavaScript로 구현하기)IT Study/FE 2023. 11. 7. 16:07
탐색 알고리즘이란? 그래프의 모든 정점들을 특정한 순서에 따라 방문하는 알고리즘입니다. ⭐️ DFS(깊이 우선 탐색)이란? 시작점부터 갈 수 있는 정점까지 깊이있게 파고 드는 탐색 알고리즘 DFS 장단점 장점 1. 직관적인 코드, 구현이 용이 단점 1. 깊이가 깊어질수록 예측하기 어려운 메모리 비용 2. 최단 경로 파악 불가 DFS의 원리 *스택 (LIFO) push() : 배열 끝에 새로운 요소 추가 및 새로운 길이 반환 pop(): 배열의 마지막 요소 제거 및 그 요소 반환 A B D E F C G H I J 순으로 깊이를 기준으로 먼저 탐색하는 알고리즘입니다. 위 그림을 기준으로 DFS의 원리를 확인해보도록 하겠습니다. (1) A를 시작 정점으로, 스택에 A를 넣습니다. (스택 : A) (2) A를..
-
[프로그래머스/JavaScript] 타겟 넘버 (Feat. forEach 함수)IT Study/프로그래머스 2023. 11. 7. 14:26
📃 최종 코드 테스트 통과에 정말 많은 시간이 소요되었습니다. (왜인지 확인하기 위해 시간복잡도를 확인해 봤습니다.) 아래 코드에서 저는 먼저 numbers 배열의 합을 구한 뒤, 1부터 numbers 배열의 길이까지의 원소를 선택하는 모든 조합을 구합니다. 각 조합의 합이 목푯 값과 일치하는지 확인합니다. 이렇게 모든 조합을 구하는 과정에서 getCombine 함수를 사용하며, 이 함수는 numbers 배열의 각 원소를 기준으로 재귀적으로 조합을 구합니다. 따라서, 이 함수의 시간 복잡도는 O(2^n)입니다. 전체 코드의 시간 복잡도는 각 원소를 선택하는 경우의 수(2^n)와 원소를 선택하는 횟수(n)를 곱한 O(n * 2^n) function solution(numbers, target) { let ..
-
[프로그래머스/JavaScript] 베스트앨범 (Feat. 첫 Lv3)IT Study/프로그래머스 2023. 11. 6. 14:49
초기 코드 function solution(genres, plays) { // 베스트 앨범에 들어갈 노래의 고유 번호를 저장하는 Array let answer = []; // 장르 별 총 재생 수를 나타내는 Map let genreTotalPlayMap = new Map(); for (let i = 0; i < genres.length; i++) { const genre = genres[i]; const play = plays[i]; if (genreTotalPlayMap.has(genre)) { genreTotalPlayMap.set(genre, genreTotalPlayMap.get(genre) + play); } else { genreTotalPlayMap.set(genre, play); } } /..
-
[프로그래머스/JavaScript] 나머지가 1이 되는 수 찾기IT Study/프로그래머스 2023. 11. 2. 11:26
이 문제를 처음 봤을 때는 굉장히 쉽다고 생각했습니다. 그저 for문을 돌려 나머지가 1이 되는 수를 찾으면 되니까... 너무 쉽잖아?라고 생각했는데요. 그러나 이제는 시간복잡도를 고려해 코드를 작성해야겠다는 생각에 조금 더 고민하는 시간을 갖게 되었습니다. 🤔 생각의 흐름 (1) n을 x로 나눈 나머지가 1이 되도록 하는 가장 자연수를 찾기 위해 n % x === 1을 꼭 사용해야 할까? (2) 새로운 변수 m을 m = n - 1로 선언하고, 나머지가 0이 되는 가장 작은 자연수를 찾아보자. (3) for문으로 전체를 돌린다면 시간복잡도는 O(n)이 될 텐데... 어떻게 하면 시간복잡도를 줄일 수 있을까? (4) m이라는 수를 기준으로 중간 값, 혹은 제곱근 값 이하에서 찾으면 어떨까? 💻 결과 코드 ..
-
[프로그래머스/JavaScript] 달리기 경주 (Feat. 찾기 연산의 시간복잡도)IT Study/프로그래머스 2023. 10. 30. 12:27
☝🏻 1차 시도 function solution(players, callings) { let answer = [...players]; for(let i = 0; i < callings.length; i++) { const calling = callings[i]; const index = answer.indexOf(calling); const temp = answer[index - 1]; answer[index - 1] = answer[index]; answer[index] = temp; } return answer; } 🥚 중간 과정 function solution(players, callings) { let answer = [...players]; for(let calling of callings) {..