일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 모던 javascript Deep Dive
- 투포인터알고리즘 js
- TypeScript 문법 소개
- KDT 프로그래머스
- 프로그래머스 데브코스
- useRef 지역 변수
- react customHook 예시
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 K_Digital Training 프론트엔드
- K_Digital Training
- Vue3
- 리팩토링 회고
- 인프런 자바스크립트 알고리즘 문제풀이
- Frontend Roadmap
- 백준 node.js
- Vue3 Router
- 프로그래머스 데브코스 프론트엔드 TIL
- 우테캠 회고록
- 프로그래머스 K_Digital Training
- 백준 js
- 모던 자바스크립트 Deep Dive TIL
- useEffect return
- 모던 자바스크립트 TIL
- 모던 자바스크립트 Deep Dive
- 개발자 특강
- 머쓱이
- 프로그래머스 데브코스 프론트엔드
- 모던 자바스크립트 딥다이브
- frontend roadmap study
- react 프로젝트 리팩토링
- Today
- Total
목록알고리즘_JS (113)
프론트엔드 개발자의 기록 공간
🚩 7576번_토마토 골드5 📖 문제 설명 : N x M 상자 크기에 토마토가 있을 경우, 하루가 지날 때마다 인접 토마토들을 익게 한다. 모든 토마토가 익는 데까지 걸리는 최소 일수 구하기 💡 시간 초과를 벗어나기 위해서는 queue 알고리즘을 구현해서 사용 or index가 증가하는 cursor를 두고, queue.length < queueCursor를 사용 queue 알고리즘을 구현 예시 const fs = require('fs') const [mn, ...input] = fs .readFileSync('/dev/stdin') .toString() .trim() .split('\n') const [m, n] = mn.split(' ').map(Number) const graph = input.map..
🚩 1463번_1로 만들기 실버3 📖 문제 설명 : N 개의 줄에 각각 빨강, 초록, 파랑 집이 주어진다. N 번째 선택한 집의 색은 N-1 번째 선택한 집의 색과 같지 않아야 한다. 즉 N 번째 집이 빨간색일 때, N-1, N+1은 빨간색으로 칠할 수 없다. 또한, 각각의 집의 비용이 다르기 때문에 최소한의 비용을 선택하면서 규칙에 어긋나지 않게 선택해야 한다. 💡 모든 경우를 선택해서 마지막에 최솟값을 출력하면 된다. 즉, N 번째 파란색을 선택하는 경우는 N 번째 파란색 집 + N-1 번째 빨간색 집 + N-1 번째 초록색 집의 가격이다. 이 개념을 생각해서 각각의 집을 선택할 때 적용하면 된다. const fs = require('fs') const input = fs.readFileSync('/..
🚩 1463번_1로 만들기 실버3 📖 문제 설명 : 정수 N이 주어졌을 때 주어진 조건에 따라 1로 만든다. 이때 연산을 사용하는 횟수의 최솟값을 구해라. 💡 DP 유형이므로 i번째를 구할 때, i 이전의 값들을 이용해서 해결한다. const fs = require('fs') const input = fs.readFileSync('/dev/stdin').toString().trim() let N = Number(input) let answer = Array.from(Array(N + 1), () => 0) answer[2] = 1 answer[3] = 1 for (let i = 4; i 이전 값의 경우의 수 +1 answer[i] = answer[i - 1] + 1 // 3으로 나누어지는 경우 -> 3으..
🚩 최소직사각형 JS 📖 문제 설명 : 가로, 세로 길이가 적힌 명함들의 정보가 주어질 때, 최소한의 크기로 명함 지갑을 만들려고 할 때, 필요한 가로, 세로 크기를 구해라. 단 명함은 가로로 눕혀 가로 세로를 바꿀 수 있다. 💡 명함을 가로 세로 전환이 가능하므로(눕힐 수 있다) 명함 당 가로를 큰 쪽, 세로를 작을 쪽으로 돌린다. function solution(sizes) { let answer = 1 // 가로의 길이를 제일 긴 변으로 설정 후 회전 for (let i = 0; i < sizes.length; i++) { if (sizes[i][0] < sizes[i][1]) { ;[sizes[i][0], sizes[i][1]] = [sizes[i][1], sizes[i][0]] } } // 가로..
🚩 신고 결과 받기 JS 📖 문제 설명 : 일반 유저가 악성 유저를 신고할 수 있다. 사용자가 지정한 신고 횟수 이상으로 신고를 당한 악성 유저는 차단을 당하고, 차단 당한 사실을 신고한 유저에게 메일로 알려줘야 한다. 프로그래머스 문제 💡 Map, Set 객체를 이용한다. 처음 해결한 코드 function solution(id_list, report, k) { let answer = [] let idMap = new Map() // key : id_list, // value : {reportList : 유저가 신고한 ID 목록, cnt : 자신이 신고 당한 횟수, mail : 메일을 받을 횟수} id_list.forEach((el) => idMap.set(el, { reportList: [], cnt:..
🚩 최대 부분 증가 수열 📖 문제 설명 : N개의 자연수의 수열이 주어질 때, 가장 길게 증가하는 원소의 길이를 찾아라. ex) 2, 7, 5, 8, 6, 4, 7, 12, 3 이면 가장 길게 증가하는 원소들은 2, 5, 6, 7, 12이다. 따라서 길이는 5이다. 💡 i 번째 원소에서 0 ~ i-1 번째 원소를 탐색하면서 자기보다 작은 원소들의 개수를 파악한다. // 최대 부분 증가수열 (DP) function solution(arr, n) { let answer = 0 let dp = Array.from(Array(n), () => 0) dp[0] = 1 for (let i = 1; i = 0; j--) { if (a..