월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 한번 봐주실 수 있으신가요?
function solution(arr) { const strArry = arr.split(""); let answer = []; let i = 0; while (i < strArry.length) { if (strArry[i] === "(") { answer.push(strArry[i]); } else { answer.pop(strArry[i]); } i++; } return answer.length === 0 ? "YES" : "NO"; } //console.log(solution("(()(()))(()")); console.log(solution("(((())))"));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
제 코드도 한번만 봐주실 수 있을까요? ㅠㅠ
function solution(sum, arr) { let left = 0; let right = 0; let add = 0; let count = 0; while (right < arr.length) { if (add >= sum) { add -= arr[left ++]; } else { add += arr[++right]; } if (add === sum) count++; } return count; } console.log(solution(6, [1, 2, 1, 3, 1, 1, 1, 2]));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(s, arr) { const cache = Array.from({ length: s }).fill(0); for (let i = 0; i < arr.length; i++) { // cache miss if (!cache.includes(arr[i])) { cache.unshift(arr[i]); cache.pop(); } // cache hit else { const idx = cache.indexOf(arr[i]); const temp = cache[idx]; let j; for (j = idx - 1; j >= 0; j--) { cache[j + 1] = cache[j]; } cache[j + 1] = temp; } } return cache; } let arr = [1, 2, 3, 2, 6, 2, 3, 5, 7]; console.log(solution(5, arr)); // 7 5 3 2 6 최악의 경우 O(N^2)인 거 같은데 맞나요 ?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 코드를 작성해도 삽입 정렬인가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { for (let i = 1; i < arr.length; i++) { for (let j = i; j > 0; j--) { if (arr[j] < arr[j - 1]) { [arr[j - 1], arr[j]] = [arr[j], arr[j - 1]]; } } } return arr; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 검토
안녕하세요! 선생님의 bfs 풀이 아이디어를 듣고 혼자 풀어봤습니다! 저의 경우 ch 랑 dis를 합쳐서 check 로 풀어서, 디폴트가null 이어서 널 이면 큐에 넣고, 숫자가 들ㄹ어가있으면 continue 하는 식을로 했는데 괜찮을까요?function solution(s, e) { let answer = 0; let dx = [1, -1, 5]; let check = Array.from({ length: 10001 }, () => null); check[s] = 0; let queue = []; queue.push(s); while (queue.length) { let v = queue.shift(); if (v === e) { answer = check[v]; break; } for (let a of dx) { let x = a + v; if (check[x] !== null || x < 1 || x > 10000) continue; check[x] = check[v] + 1; queue.push(x); } } return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의 질문 및 코드 리뷰
안녕하세요 이번 강의를 듣고 선생님께서 알려주신 풀이 방법을 이해하게 되었습니다 감사합니다!다만 제가 몇가지 질문이 있어 글 올립니다!1 . 풀이 방향이 각각의 (조합) * (숫자) 의 합이 되는데 왜 마지막 숫자가 (조합) * (숫자) 의 합이 되나요 ???제가 강의를 듣기전에 혼자서 코드를 짜보았는데 왜 이 코드는 답이 안나오는지 여쭈고 싶습니다!function solution(n, end) { let mem_arr = Array.from(Array(n + 1), () => Array(n + 1).fill(0)); // 메모이제이션 let comb_arr = Array.from({ length: n }, () => 0); // 조합의 배열 let check = Array.from({ length: n }, () => false); // for 수열 (중복X) let arr = Array.from({ length: n }, () => 0); // 순열 저장 let answer = []; function comb(n, r) { if (n === r || r === 0) return (mem_arr[n][r] = 1); if (mem_arr > 0) return mem_arr[n][r]; return (mem_arr[n][r] = comb(n - 1, r - 1) + comb(n - 1, r)); } for (let i = 0; i < n; i++) { comb_arr[i] = comb(n - 1, i); } function dfs(lev) { if (lev >= n) { let sum = 0; for (let i = 0; i < n; i++) { sum += comb_arr[i] * (i + 1); } if (sum === end) { answer.push(arr.slice()); } } else { for (let i = 1; i <= n; i++) { if (check[i] === true) continue; check[i] = true; arr[lev] = i; dfs(lev + 1); check[i] = false; } } } dfs(0); return answer; }제가 처음에 의도했던 코드의 경우로는,,일단 순열을 arr에 저장하고 lev=== n 이 될때 구한 순열과 조합의 곱의 합인 sum 을 구하여 비교하는 방식으로 짰습니다. 근데 이 코드를 실행해보니까 arr 이 (1,2,3,4) 로만 나오는데 어디서 잘못됐는지 잘 모르겠습니다!! 답변 주시면 정말 감사하겠습니다 😄
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
while 문 펙토리얼
안녕하세요 제가 코드 짤때 재귀함수로도 풀어보고 while문으로도 풀어보았는데 둘의 시간복잡도나 그런 부분에 큰 차이가 있나요??function solution(n) { let answer; function factorial(k) { if (k === 1) return 1; return factorial(k - 1) * k; } answer = factorial(n); return answer; // while 문 이용 // let answer = 1; // while (n >= 1) { // answer *= n; // n--; // } // return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 검토
안녕하세요 제가 강의듣기 전에 풀어보았는데저의 경우 처음 dfs()를 호출할때 for문으로 돌려서 했는데 이런식으로 해도 괜찮을까요?function solution(n, m) { let answer_arr = [], answer_cnt = 0; let arr = Array.from({ length: n }, (v, k) => k + 1); function dfs(k, str, cnt) { if (cnt > m) { answer_arr.includes(str) || answer_arr.push(str); } else { str += k + " "; for (let x of arr) dfs(x, str, cnt + 1); } } for (let x of arr) dfs(x, "", 1); return answer_arr; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 검사 부탁드립니다!
안녕하세요 이진트리 개념 듣고 강의 듣기전에 한번 풀어보았는데 이런 식으로 작성해도될까요? 틀린부분 있으면 피드백 부탁드립니다!function solution(k) { let answer = []; function dfs(n, arr) { let arr1 = [...arr, n]; if (n > k) { arr.length && answer.push(arr); return; } else { dfs(n + 1, arr); dfs(n + 1, arr1); } } dfs(1, []); return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
투포인터스 알고리즘으로 푸는 방법이 제가 이해한게 맞을까요?
제가 이해한 걸로는 두개의 포인터 변수를 이용하여서 반복문을 하나를 가지고 문제를 푸는거라고 이해를 해서 아래와 같이 하나의 반복문으로 풀려고 노력했는데 해당 알고리즘이 제가 이해한 이론이 맞나요? function solution(arr1, arr2) { let answer = []; let sorArr1 = arr1.sort((a, b) => a - b); let sortArr2 = arr2.sort((a, b) => a - b); let n = sorArr1.length; let m = sortArr2.length; let p1 = (p2 = 0); while (p1 < n) { if (sorArr1[p1] === sortArr2[p2]) { answer.push(sorArr1[p1]); } p2++; if (p2 === m - 1) { p1++; p2 = 0; } } return answer; } console.log(solution([1, 3, 9, 5, 2], [3, 2, 5, 7, 8]));정답은 잘 나옵니다만... 핵심이 두개의 포인터 변수와 하나의 반복문만 사용한다 라고 기억 할려고 하는데 이게 맞을지...
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
concat과 sort로 풀었는데 맞는지 모르겠네요
function solution(arr1, arr2) { let answer = ""; return arr1.concat(arr2).sort((a, b) => a - b); } console.log(solution([1, 3, 5], [2, 3, 6, 7, 9]));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(board, moves) { let answer = 0; let stack = []; for (let j = 0; j < moves.length; j++) { stack.push(board[moves[j] - 1].pop()); if (stack[stack.length - 1] === 0) { stack.pop(); } if ( stack.length >= 2 && stack[stack.length - 1] === stack[stack.length - 2] ) { stack.pop(); stack.pop(); answer += 2; } } return answer; } let a = [ [0, 0, 0, 0, 0], [0, 0, 1, 0, 3], [0, 2, 5, 0, 1], [4, 2, 4, 4, 2], [3, 5, 1, 3, 1], ]; let b = [1, 5, 3, 5, 1, 2, 1, 4]; console.log(solution(a, b)); </script> </body> </html>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드의 시간 복잡도에 대해 궁금합니다!
function solution(str, t) { let answer; const counts = {}; const formatted = [...str]; formatted.forEach((char, i) => { if (counts[char]) { return counts[char].push(i); } counts[char] = []; counts[char].push(i); }); const tIndexs = counts[t]; answer = formatted.reduce((store, cur, i) => { const tmp = []; tIndexs.forEach((index) => { tmp.push(Math.abs(index - i)); }); store.push(Math.min(...tmp)); return store; }, []); return answer.join(' '); } let str = 'teachermode'; console.log(solution(str, 'e')); 입력값의 크기 N마다 tIndex만큼 반복하니까 O(N^2) 인지아니면 O(N)의 시간복잡도를 갖는지 궁금합니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰
안녕하세요 강의 듣기 전에 혼자서 풀어보았는데 다음 코드도 가능할까요 ?function solution(s, arr) { let answer = Array.from({ length: s }, () => 0); for (let i = 0; i < arr.length; i++) { let p = answer.indexOf(arr); if (p > -1) { let tmp = arr[i]; for (let j = p; j > 0; j--) { answer[j] = answer[j - 1]; } answer[0] = tmp; } else { for (let j = answer.length - 1; j >= 0; j--) { if (answer[j] === 0 || j === answer.length - 1) continue; let tmp = answer[j]; answer[j + 1] = tmp; } answer[0] = arr[i]; } } return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이런식으로 풀어도 될까요?
indexOf를 사용했습니다.const Sol7 = () => { const s = "CBA"; const sub = "CBDAGE"; const solution = (s, sub) => { let answer = "YES"; let queue = s.split(""); for (let j = 0; j < sub.length; j++) { let subArr = sub.split(""); if (queue.includes(subArr[j])) { if(queue.indexOf(subArr[j]) !== 0) return answer = "NO" queue.shift(); } } return answer; }; console.log(solution(s, sub)); return <div></div>; }; export default Sol7;
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 2. 1, 2차원 배열 탐색 - 1번문제
섹션 2. 1, 2차원 배열 탐색 - 1번문제 앞의 숫자보다 크면 출력하는건데 let arr=[7, 3, 9, 5, 6, 12];arr이 이럴때, 7앞부분엔 아무것동 없는데 정답 출력에 왜 7이 들어가는지 잘모르겠어서요.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮은걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 1; i < arr.length; i++) { for (let j = 0; j < i; j++) { if (arr[i] < arr[j]) { arr.unshift(arr[i]); arr.splice(i + 1, 1); } else { if (arr[i] < arr[j + 1]) { arr.splice(j + 1, 0, arr[i]) arr.splice(i + 1, 1) } } } } return answer; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의보기전 직접 풀 수 있는 문제 오랜만입니다. ㅠㅠ
이전 2문제에 비해 다소 쉬웠습니다.function solution(cards, orderNum) { let answer = []; let n = cards.length; // n개 카드수에서 3개를 더한 합의 값이 제일 큰 순서대로 나열 // k번째로 큰 수를 리턴 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { if (i === j) continue; for (let z = 0; z < n; z++) { if (i === z) continue; if (j === z) continue; answer.push(cards[i] + cards[j] + cards[z]); } } } answer = answer.sort((a, b) => b - a); return Array.from(new Set([...answer]))[orderNum - 1]; } const k = 3; console.log(solution([13, 15, 34, 23, 45, 65, 33, 11, 26, 42], k));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 코드 리뷰 부탁드립니다 includes 사용하였습니다
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(n, k, card) { let answer; let newArr = []; for (let i = 0; i < n; i++) { for (let j = i + 1; j < n; j++) { for (let k = j + 1; k < n; k++) { if (newArr.includes(card[i] + card[j] + card[k])) { continue; } else { newArr.push(card[i] + card[j] + card[k]); } } } } newArr.sort((a, b) => b - a); answer = newArr[k - 1]; return answer; } let arr = [1, 2, 3, 4]; console.log(solution(10, 3, arr)); </script> </body> </html>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이 리뷰
안녕하세요 제가 강의 듣기 전에 혼자 풀어봤는데요function solution(s) { let answer = 0, stack = [], tmp = 0; // tmp : 잠시 * 개수 저장하는 곳 s = s.replaceAll("()", "*"); for (let x of s) { if (x === ")") { while (stack.length) { let top = stack.pop(); if (top === "*") tmp++; else { // 여는 괄호 나오면 answer += tmp + 1; for (let i = 0; i < tmp; i++) stack.push("*"); // 괄호들은 빼고 *만 넣기 tmp = 0; //tmp초기화 break; } } } else stack.push(x); } return answer; }일단 초반에 레이저 부분은 *으로 바꾸었고 바꾼 s 로 for 문 돌려서 풀었습니다..!(**)와 같이 되면 answer에 별개수+1 을 더하고괄호를 제외한 ** 별들만 다시 stack 에 넣어서 계산했습니다..!혹시 위 코드가 틀리거나 문제점이 있을까요 ???