월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
두 코드의 차이
강사님 안녕하세요!코드를 보다가 궁금한 점이 있어 질문드립니다.저는 아래와 같이 최소 값을 따로 배열로 걸러내서 Math.min을 사용해서 구했습니다.강사님 방식과 비교해보니 저는 배열을 하나 더 썼고 Math.min을 사용했기 때문에 제 코드가 조금 더 비효율적으로 보이는데, 저와 비슷하게 코드를 짠 분의 답글에 괜찮은 코드라고 하시더라구요!두 코드 사이의 속도나 효율성면에서는 큰 차이가 없는 것인가요? function solution(arr){ let answer = []; let sum = 0, min = 0; arr.forEach((num) => { if (num % 2 !== 0) { sum += num; // 합산하기 answer.push(num); // 홀수 걸러내기 } }) min = Math.min(...answer); answer = [sum, min]; return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
hit가 발생한 후부터만 뒤로 하나씩 미는 방법
function solution(size, arr) { const cache = new Array(size).fill(0); let hit; for (let i = 0; i < arr.length; i++) { hit = false; for (let j = cache.length - 1; j >= 0; j--) { if (hit) { cache[j + 1] = cache[j]; } if (cache[j] === arr[i]) { hit = true; } } if (!hit) { cache.unshift(arr[i]); cache.pop(); } else cache[0] = arr[i]; } return cache; }바깥 for문 처음에 캐시 배열에 찾는 값이 있는지 확인하는 반복문을 한번 돌지 않고, 한번만 반복문을 돌면서 hit가 발생한 이후부터만 뒤로 한칸씩 미는 방법으로 코드를 짜봤습니다.이렇게 작성해도 괜찮을까요? 반례 있을까요?
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for문에 있는 DFS
function solution(n, m) { let answer = []; let tmp = Array.from({ len function DFS(L, s) { if (L === m) { answer.push(tmp.slice( } else { for (let i = s; i <= n tmp[L] = i; console.log(tmp); DFS(L + 1, s + tmp[L]); } } } DFS(0, 1); return answer; } console.log(solution(4, 2));강사님 저는 강의 보기전에 i + 1이 아닌 s + tmp[L]로 하니까 정답이 나오더라구요, 이렇게 해도 문제가 없 는 코드인가요?
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 섹션8-16 수들의 조합 질문드립니다
function solution(k, nums, m) { const isMulti = (n, m) => { if (!(n % m)) return 1; return 0; }; let ans = 0; function DFS(L, sp, sum) { if (L === k) { console.log(L, tmp, sp, sum); if (isMulti(sum, m)) ans++; } else { for (let i = sp; i < nums.length; i++) { DFS(L + 1, i + 1, sum + nums[i]); } } } DFS(0, 0, 0); return ans; }해당 문제 시간복잡도가 궁금하여 질문드립니다.해당 문제를 선생님과 똑같이 풀이했는데요, DFS 내부 for문의 i시작점이 동적으로 변하다보니 시간복잡도를 어떻게 잡아야 할지 몰라 헷갈려 질문드려요.만일 for문의 i의 시작점이 고정적으로 0이라면 O(N^K)가 될 것 같은데,이처럼 i가 유동적으로 변하는 것으로 기존 빅오 표기에 영향이 갈만큼 차이가 발생하게 되나요?시간내어 확인해주셔서 감사합니다.
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 섹션8 DFS의 동전교환 문제 관련 질문드립니다.
function solution(coins, m) { coins.sort((a, b) => b - a); let ans = 0; function DFS(L, sum) { if (sum > m) { return; } if (sum === m) { ans = L; return "end"; } else { for (let i = 0; i < coins.length; i++) { if (DFS(L + 1, sum + coins[i]) === "end") return "end"; } } } DFS(0, 0); return ans; } 동전 교환 문제에서 강사님께서 가르쳐주신 코드도 실습해 본 후, 제 나름대로 작성해본 코드입니다. 제 얕은 생각으로는 위 코드처럼 가장 먼저 동전 종류를 내림차순으로 정렬한 후, DFS를 가지쳐 내려나간다면, 가장 큰 단위부터 적용해나가므로 맨 처음 종료조건에 도달해 ans에 대입되는 값이 무조건 최소동전 개수가 되지 않을까 생각해서 이렇게 작성했습니다.이 풀이가 틀린지 궁금하고, 만일 맞다면 시간복잡도 상 효율이 극단적으로 떨어지는 최악의 경우가 존재할 지 또한 궁금합니다.귀한 시간 내어 읽어주셔서 감사합니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 6 ( 1.올바른 괄호 <스택> ) 질문입니다!
아래는 올바른 괄호(스택) 문제 답안 코드입니다.Q. 만약 주어진 let = a가 "(" 이게 아닌 ")" 이걸로 시작하면 답안 같은 경우는 무조건 NO가 나와버리는데문제가 "(" 이걸로 시작해서 문제를 감안해서 ")" 이걸로 시작하는 경우는 배제하고 답안을 도출하신 걸까요?다른 이유나, 제가 이해 못 한 부분이 있는 건가 싶어서 여쭤봅니다 ! function solution(s){ let answer="YES"; stack=[]; for(let x of s){ if(x==='(') stack.push(x); else{ if(stack.length===0) return "NO"; stack.pop(); } } if(stack.length>0) return "NO"; return answer; } let a="(()(()))(()"; console.log(solution(a));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 관련 질문드립니다.
안녕하세요 수업 재미있게 듣고 있습니다.궁금한게 있는데요, 352+*9-의 5+2 대신에아래처럼 10+2(십의자리)이면 어떻게 계산하게 되나요?3102+*9-다른 조건이 필요한건가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
조건문
function solution(c, arr) { let answer = 0; let n = arr.length; function DFS(L, sum) { //if (sum > c) return; if (L === n) { console.log(sum); if (sum <= c) { answer = Math.max(answer, sum); } } else { DFS(L + 1, sum + arr[L]); DFS(L + 1, sum); } } DFS(0, 0); return answer; } let arr = [81, 58, 42, 33, 61]; console.log(solution(259, arr));강사님, 저는 동영상 보지 않고 혼자 풀었을 때, if(sum > c) return 대신에,if(L === n) 만에 if(sum <= c) 조건을 넣어서 풀었는데, 그래도 답은 나오더라구요. 이렇게 하면 sum이 c보다 큰 수의 경우도 포함되어서 확인하기는 하는데, 이렇게 풀어도 크게 차이는 없나요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
map 과 filter 함수를 써봤는데, 이렇게 하면 효율적이지 않은가요?
for 문 돌리는게, method 돌리는것보다 빠르다고 하는데, method 들로만 사용하여 풀면 효율적이지 않은건가요?아래 코드로 진행해도 괜찮을까요? function solution(s){ let answer="" const lengths = s.map(str => str.length) const max = Math.max(...lengths) answer= s.filter(str => str.length === max).join('') return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
꼭 L이 n일때 끝나지 않아도 되지 않나요??
function solution(arr) { let answer = "NO"; let total = arr.reduce((a, b) => a + b); let n = arr.length; function DFS(L, sum) { if (answer == "YES" || L > n ||sum > total / 2) return; if (total / 2 === sum) { answer = "YES"; return; } else { DFS(L + 1, sum + arr[L]); DFS(L + 1, sum); } } DFS(0, 0); return answer; }어떤 배열의 서로소 부분집합의 합은 같아야 한다= 서로소인 부분집합의 합은 total의 반이 되면 된다.라고 한다면 어떤 부분집합의 합이 total의 반이 된다면 바로 끝내면 되지 않을까 해서 여쭤봅니다. if(L===n){ if((total-sum)===sum){ answer="YES"; } } 즉 이 부분에서, 꼭 L===n이 되지 않더라도 그 전에 sum이 total의 반이 된다면 끝날 수 있어도 되지 않나요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이중 for문에 대한 시간 복잡도 질문 있습니다!
밑의 코드의 내부 for문에서 최악의 경우 연산이 arr.length-1번 일어나기 때문에 시간 복잡도를 O(n^2)으로 봐야 할까요?function solution(m, arr) { let answer = 0, sum = 0; for (let i = 0; i < arr.length; i++) { sum = arr[i]; if (sum === m) { answer += 1; continue; } for (let j = i + 1; j < arr.length; j++) { sum += arr[j]; if (sum === m) { answer += 1; break; } else if (sum > m) { break; } } } return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
while문 없이 if만 사용
function solution(m, arr) { let answer = 0; let sum = 0; let lt = 0; for (let rt = 0; rt < arr.length; rt++) { if (sum < m) sum += arr[rt]; else if (sum > m) { sum -= arr[lt++]; } if (sum === m) { answer++; sum += arr[rt]; } } return answer; } let a = [1, 2, 1, 3, 1, 1, 1, 2];while문 없이 if만 사용해도 답이 나오던데 while문 이렇게 사용해도 문제가 없나요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 이런 풀이도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.let input = `7 128 460 603 40 521 137 123`.split("\n"); let num = Number(input[0]); let arr = input[1].split(" "); function solution(arr) { let answer; let sum; let sumMax = 0; let maxNum = 0; for (let i = 0; i < num; i++) { sum = arr[i].split("").reduce((acc, cur) => { return Number(acc) + Number(cur); }, 0); if (sum > sumMax) { sumMax = sum; maxNum = arr[i]; answer = arr[i]; } if (sum === sumMax) { answer = Math.max(maxNum, arr[i]); } } return answer; } console.log(solution(arr));이런식으로 한번 풀어봤는데 이런 풀이도 괜찮을걸까요..!?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
Math.max
안녕하세요 강사님궁금한 것이 있는데요마지막에 answer = Math.max(answer, cnt)는 처음부터 못 사는 경우를 생각해서 하는건가요??answer = cnt만 해도 그냥 답이 나와가지고 궁금해서 여쭤봅니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for문을 한번더 도는것보다 변수를 2개 더 추가해서 하는게 메모리적으로 더 안좋을까요?
function solution2(arr) { let answer = Number.MIN_SAFE_INTEGER; let n = arr.length; let sum1=sum2=0; let sum3=sum4=0; for(let i = 0; i < n; i++) { sum1=sum2=0; for(let j = 0; j < n; j++) { sum1+=arr[i][j]; sum2+=arr[j][i]; // 대각선 줄 if (i === j) { sum3 += arr[i][j] } // 역 대각선 줄 if (j === (arr[i].length - i) - 1) { sum4 += arr[i][j] } } answer = Math.max(answer, sum1, sum2, sum3, sum4); } return answer; }위 방식으로하면 변수는 더 추가되서 메모리적으로 낭비이지만 만약 배열 데이터가 많다면 시간 복잡도상 2중 for문을 한번밖에 안쓴 위 코드가 유리한거같은데 평가 부탁드립니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요! 코드 평가 부탁드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(m, arr) { let answer = 0, end = 0, sum = 0; for (let start = 0; start < arr.length; start++) { end = start + 1; sum += arr[start]; if (sum <= m) { answer++; } while (sum < m && end < arr.length) { sum += arr[end]; if (sum <= m) { answer++; end++; } } sum = 0; } return answer; } let a = [1, 3, 1, 2, 3]; console.log(solution(5, a));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
split 사용
function solution(s) { let answer = ""; let count = 0; for (let i = 0; i < s.length; i++) { if (s[i] === s[i + 1]) { count++; } else if (s[i] !== s[i + 1]) { answer += s[i] + (count + 1); count = 0; } } return answer.split("1").join(""); } let str = "KKHSSSSSSSE"; console.log(solution(str));강사님 코드가 거의 비슷한데 마지막에 1을 없애주기 위해서 split을 사용해서 1을 없애 주고 다시 문자열로 만들어주었는데, 이정도는 시간과 별로 상관이 없나요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다 !
function solution(need, plan) { let answer = 'YES'; let queue = []; for (let x of plan) { if (need.includes(x)) queue.push(x); } if (need !== queue.join('')) return 'NO'; return answer; } let a = 'CBA'; let b = 'CBDAGE'; console.log(solution(a, b)); 큐로 접근해서 문제풀이하고 싶었으나 비효율적(?)으로 풀어버렸습니다 😂 혹시 이렇게 풀이해도 괜찮은걸까요 ? 리뷰 부탁드립니다 !
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
바둑이 승차관련 sum>c return으로 조건을 돌면 최대값을 찾기 전에 프로그램이 종료되는건 아닌가요??
<script> function solution(c, arr){ let answer=Number.MIN_SAFE_INTEGER; let n=arr.length; function DFS(L, sum){ if(sum>c) return; if(L===n){ answer=Math.max(answer, sum); } else{ DFS(L+1, sum+arr[L]); DFS(L+1, sum); } } DFS(0, 0); return answer; } let arr=[81, 58, 42, 33, 61]; console.log(solution(259, arr)); </script> 아직 재귀에 대한 이해가 짧아 잘 모르겠습니다.답은 242인데,만약 sum의 값이 181이었고 다음에 나온 sum의 값이275라고 한다면sum>259일때 return으로 함수가 종료되고최대값인 242를 찾지 못하고 181로 종료가 될수도 있는것 아닌가요??아니면 제가 이해를 잘못한건지요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
아래 코드와 같이 구현해도 시간복잡도는 같을까요?
function solution(m, arr) { let answer = 0; let n = arr.length; let p1 = 0; let p2 = 1; let tmp = arr[p1] + arr[p2]; while (p2 < n) { if (tmp === m) { answer++; tmp = tmp - arr[p1++] + arr[++p2]; } else if (tmp < m) { tmp += arr[++p2]; } else { tmp -= arr[p1++]; } } return answer; } let a = [1, 2, 1, 3, 1, 1, 1, 2]; console.log(solution(6, a));