자바스크립트
-
[백준 알고리즘/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. DFS, 조금씩 이해된다...)IT Study/프로그래머스 2023. 12. 13. 16:32
📊 1. 나만의 테스트 케이스 만들기 (많을수록 좋음) 아래와 같이 연결된 네트워크가 있다고 가정해봅시다. 0 / 1 ----/------- 4 \ / \ / 2 3 테스트 케이스 n = 5 computers = [[1, 0, 1, 0, 0], [0, 1, 1, 0, 1], [1, 1, 1, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 0, 1]] 그래프의 형태로 나타내면 아래와 같을 것 같군요. (연결 상태 확인하기) 0 : [2] 1 : [2, 4] 2 : [0, 1] 3 : [] 4 : [1] 이 경우에는 "0, 1, 2, 4"와 "3"가 개별 네트워크로 연결되어, return(결과값)은 2여야 합니다. 🤔 2. 사고하기 (1) 0을 확인한다. (0) (2) 0에 연결된 아이는 2이..
-
[알고리즘] 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] 주사위 게임 3 (Feat. Map)IT Study/프로그래머스 2023. 10. 11. 17:02
어우... 정말 어려웠는데요. 이 문제를 풀기 위해 찾았던 개념들에 대해 먼저 정리하고자 합니다. 1. JavaScript의 Map - 값을 저장(변경) : set(key, value) - key 존재 여부 확인 : has(key) - key에 해당하는 value 가져오기 : get(key) - size(크기) 확인 : size - map의 key, value 확인(사용) : forEach((value, key) => {}) 2. JavaScript의 배열 - 값 저장 : push(값) - 배열 중 최소 값 구하기 : Math.min(... 배열명) 3. 절댓값 구하기 - 절댓값 : Math.abs(숫자) 4. 제곱 구하기 - 제곱 : ** 초기 코드 function solution(a, b, c, d)..
-
[프로그래머스/JavaScript] 조건 문자열 (Feat. eval)IT Study/프로그래머스 2023. 10. 10. 21:07
기본 코드 function solution(ineq, eq, n, m) { var answer = 0; return answer; } 최종 코드 테스트 1 〉통과 (0.06ms, 33.4MB) 테스트 2 〉통과 (0.06ms, 33.4MB) 테스트 3 〉통과 (0.05ms, 33.6MB) 테스트 4 〉통과 (0.06ms, 33.4MB) 테스트 5 〉통과 (0.06ms, 33.4MB) ... 수식이 곧 문자열이라고 생각했는데, 잘못 생각한 듯하여 혹시 "문자열을 수식으로 바꾸는 함수가 있나?" 찾아봤습니다. eval 그러나 eval은 보안, 성능 저하, 명확하지 않은 코드의 의도들로 인해 사용을 지양한다고 합니다. function solution(ineq, eq, n, m) { // 결과를 담는 answe..
-
[프로그래머스/JavaScript] 문자열 겹쳐쓰기IT Study/프로그래머스 2023. 10. 10. 20:10
처음엔 split(), substr(), substring(), slice()와 같이 문자열을 자르는 메서드를 사용해야 할 것 같았습니다. 그러나, overwrite_string의 길이만큼 문자열이 대체되는 것이 아니라 방향을 바꾸어 진행했습니다. 기본 코드 function solution(my_string, overwrite_string, s) { var answer = ''; return answer; } 최종 코드 테스트 1 〉통과 (0.05ms, 33.7MB) 테스트 2 〉통과 (0.05ms, 33.4MB) 테스트 3 〉통과 (0.05ms, 33.4MB) 테스트 4 〉통과 (0.05ms, 33.4MB) ... 앞선 문제에서 다른 사람들이 풀이할 때에 사용한 join() 메서드를 처음 사용해본 것이..
-
[프로그래머스/JavaScript] 대소문자 바꿔서 출력하기IT Study/프로그래머스 2023. 10. 10. 19:14
일단 대소문자라고 하니, 영어 아스키코드를 다시 한번 보겠습니다. A ~ Z : 65 ~ 90 a ~ z : 97 ~ 122 자바스크립트에서 아스키코드와 관련있는 메서드에 대해 알아보죠. 문자 → 아스키 문자열.charCodeAt(인덱스) 문자열에서 인덱스에 해당하는 값을 아스키코드로 변환 아스키 → 문자 String.fromCharCode(아스키) 해당 아스키코드에 대해 문자로 변환 기본 코드 const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let input = []; rl.on('line', function (line) { in..