월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
재귀 함수로 문제를 풀어봤습니다.
function solution(arr) { arr.sort((a, b) => { if (a[0] === b[0]) return a[1] - b[1]; else a[0] - b[0]; }); function plan(idx, cnt) { cnt++; for (let i = idx + 1; i < arr.length; i++) { if (arr[idx][1] <= arr[i][0]) cnt = Math.max(cnt, plan(i, cnt)); } return cnt; } const answer = plan(0, 0); return answer; } 혹시 어디가 잘못된걸까요 ,,
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
`while`문으로 풀어봤습니다.
안녕하세요 선생님! 매번 질 좋은 강의 해주셔서 감사합니다. 다름이 아니라 강의 코드와는 다르게 `while`문으로 투포인터를 이용했는데 다음과 같은 코드도 괜찮은 코드인지 여쭤보고 싶습니다! let s = "bacaAacba"; let t = "abc"; console.log(solution(s, t)); function solution(s, t) { let n = s.length; let m = t.length; let sum = ""; let lt = rt = cnt = 0; while (rt < n) { sum += s[rt]; if (rt - lt + 1 >= m) { let sH = new Map(); let temp = sum; let flag = true; for (let x of temp) { if (sH.has(x)) sH.set(x, sH.get(x) + 1); else sH.set(x, 1); } for (x of t) { if (!sH.has(x) || sH.get(x) === 0) flag = false; sH.set(x, sH.get(x) - 1); } if (flag) cnt++; sum = sum.slice(1); lt++; } rt++; } return cnt; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요. 혹시 코드 확인 한번만 가능할까요?
function solution(total, arr) { let count = 0; for (let i = 0; i < arr.length; i++) { let addedIndex = i + 1; let sum = arr[i]; while (sum < total) { if (sum <= total) count++; sum += arr[addedIndex++]; } if (sum === total) count++; } return count; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 8의 13번 수열의 추측 시간복잡도 질문 있습니다.
선생님 조합수를 사용해도 시간복잡도는 O(n!)인거 같은데 제가 잘못 생각한걸까요? 조합수를 사용하지 않아도 메모이제이션을 사용하면 O(n!)인거 같아서 질문 드립니다. 혹시 맞으면 시간복잡도를 O(n^k)정도로 바꿀 수 있는 방법이 있을까요? 조합수를 사용하지 않은 풀이입니다. 비효율적인 부분이나 잘못된점도 알고 싶습니다. function solution(n, f){ const arrayMaker = (len, generator) => Array.from({ length: len}, (_, i) => generator(i)); const base = arrayMaker(n, idx => idx + 1); const checker = arrayMaker(n, () => 0); const temp = arrayMaker(n, () => 0); const change = i => array => array[i] === 0 ? array[i] = 1 : array[i] = 0; function *permutation (position){ if(position === n){ yield temp; } else{ for(let i = 0; i < checker.length; i++){ if(checker[i] === 0){ temp[position] = base[i]; change(i)(checker); yield *permutation(position + 1); change(i)(checker); } } } } function combination (n, r, seq){ if(bin[n - 1][r - 1] !== 0) return bin[n - 1][r - 1]; if(n === 1) return seq[r-1]; return bin[n - 1][r - 1] = combination(n - 1, r, seq) + combination(n - 1, r + 1, seq); } let bin; for(let order of permutation(0)){ bin = arrayMaker(n, () => arrayMaker(n, () => 0)); if( combination(n, 1, order) === f) return order; } } console.log(solution(4, 16));
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
while문 사용
안녕하세요 선생님. 항상 질 좋은 강의감사드립니다. 다름이 아니라 최대 매출 문제를 전 강의때 배운 투포인터를 활용해서 `while`문으로 풀었는데 괜찮은 코드인지 여쭤보고 싶습니다. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <script> function solution(n, k, arr) { let lt = rt = currentSum = 0; let max = Number.MIN_SAFE_INTEGER; while (rt < n) { currentSum += arr[rt]; if (rt - lt + 1 === k) { max = Math.max(max, currentSum); currentSum -= arr[lt++]; } rt++; } return max; } let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15]; console.log(solution(3, a)); </script> </body> </html>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
도와주세요 선생님
선생님 add<min 이렇게하면 min는 최대값이니 당연히 min에 add값이 할당된다는건 이해했는데 왜 여기서 최소값만 들어갈까요? 다른홀수값도 다 min보다작기때문에 다른 홀수값도 출력되어야하는것이 아닌가요? function solution(arr) { answer = []; sum = 0, min = Number.MAX_SAFE_INTEGER; arr.forEach(add => { if (add % 2 === 1) { sum += add if (add < min) { min = add; } } }); answer.push(sum) answer.push(min); return answer }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다
includes가 내부적으로 반복문을 도는걸로 알고있어 강의내용대로라면 need가 길어질수록 연산횟수도 많아질 거 같아 고안해보았습니다. 문제점 짚어주시면 감사하겠습니다. const solution = (requirement, schedule) => { let queue = requirement.split(''); for(let s of schedule) { if(s === queue[0]) { queue.shift(); } } return queue.length > 0 ? 'NO' : 'YSE'; } console.log(solution('CBA', 'CBBDAGE'));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게했는데 no가 나와요..
function solution(a, b, c) { let max; let total = a + b + c; let shortSum = total - max if (a < b) max = b else max = a; if (c > max) max = c if (shortSum > max) { return 'YES' } else { return 'NO' } } console.log(solution(17, 10, 9)) 맞는 것 같은데.. NO만 나오는 이유를모르겠어요 가장긴 막대 - 나머지막대의합이 더크면 YES인데..
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
선생님이 올려주신 코드에 대해 질문이 있습니다!
function solution(m, arr) { let answer = 0, l = 0, sum = 0; for (let r = 0; r < arr.length; r++) { sum += arr[r]; if (sum === m) answer++; while (sum >= m) { sum -= arr[l++]; if (sum === m) answer++; } } return answer; } 이게 선생님 올려주신 코드이구요, for (let r = 0; r < arr.length; r++) { sum += arr[r]; while (sum >= m) { if (sum === m) answer++; sum -= arr[l++]; } } for문 안을 이렇게 수정해도 코드가 잘 동작하더라구요 굳이 while문 위에 sum === m 코드를 하나 더 중복해서 빼 주어야하는 이유가 있을까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의를 보기 전 삽입정렬에 대해 읽어보고 풀어봤습니다.
삽입 정렬 문제를 아래와 같이 풀어봤는데 괜찮은 풀이 방법일까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
실행시 에러
<script> function solution(arr1, arr2) { let answer = []; let p1 = 0, p2 = 0; let n = arr1.length; let m = arr2.length; while (p1 < n && p2 < m) { if (arr1[p1] <= arr2[p2]) answer.push(arr1[p1++]); else answer.push(arr2[p2]); } while (p1 < n) answer.push(arr1[p1++]); while (p2 < m) answer.push(arr2[p2++]); return answer; } let a = [1, 3, 5]; let b = [2, 3, 6, 7, 9]; console.log(solution(a, b)); 제가 중간의 else 에서 arr[p2++] 에서 ++을 빼먹고 코드를 입력하고 실행을 했는데요, 이런 에러가 또 나오네요... 도대체 왜때문일까요 ㅠㅠㅠ
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
Set은 new를 붙여야하는 이유가 있나요?
let a = Array(); 는 에러가 나지 않는데요 let a = Set();은 안되네요 둘의 차이가 뭐길래 Set은 new를 반드시 붙여주어야 하는건가요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
에러가 나는데 도움 부탁드립니다 ㅠㅠ
강의를 듣기 전 이렇게 코드를 작성했는데요. 아래 사진처럼 에러가 뜹니다 ㅠㅠ 뭐가 문제일까요 ㅜㅜ?? function solution(n, k, card) { let list = []; for (let i = 0; i < n - 2; i++) { for (let j = i + 1; j < n - 1; j++) { for (let k = j + 1; k < n; j++) { let sum = card[i] + card[j] + card[k]; list.push(sum); } } } list = list.sort((a, b) => b - a); list.push(' '); let cnt = 1; for (i = 0; i < n - 1; i++) { if (list[i] !== list[i + 1]) cnt++; if (cnt === k) { answer = list[i]; break; } } return answer; } let arr = [13, 15, 34, 23, 45, 65, 33, 11, 26, 42]; console.log(solution(10, 3, arr));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
블루트 포스를 언제 사용하면 되나요?
옛날에 백준 문제를 풀면서 몇 번 시간초과가 뜬 기억 때문에 그냥 블루트포스로 들이박으면 되는데 이게 무의식적으로 움츠러들게 되더라구요 ㅠㅠ 예전에 C++로 문제를 풀 때에는 1억번 당 1초다 라는 얘기를 들은 적이 있는데요. 이 문제처럼 1 <= N <= 1000, 1 <= M <= 100,000,000 같은 조건을 어떻게 계산해서 블루트포스를 쓸지 말지에 대해 결정해야하는지 궁금합니다. 대부분의 문제가 블루트포스를 쓰면 당연히 풀리기야 하겠지만... 어느정도 사이즈가 되었을 때 블루트 포스가 효율적이고 얼마나 커져야 아닌지 어떤 기준으로 판단해야하는지 잘 모르겠습니다 ㅠㅠ
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 이렇게 푸는건 비효율적인가요?
win이라는 함수를 만들어서 호출하는거는 비효율적인 코드일까요? function solution(a, b){ let answer = ''; for( let i=0; i<a.length; i++ ){ answer += win(a[i], b[i]); } return answer; } function win(a, b){ if( a === b ) return 'D '; else if( a===1 && b===3 || a===2 && b===1 || a===3 && b===2 ) return 'A '; else return 'B '; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 질문입니다!
max를 안쓰고 answer=''; 로 시작해도 상관없을까요?.. function solution(s){ let answer = ''; for( let x of s ){ if( x.length > answer.length ) answer = x; } return answer; } 보기 안좋은 코드인지 괜찮은 코드인지 구분이 안돼서 질문남깁니다! 감사합니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요. 새롭게 코드를 짜봤는데 혹시 반례가 있을까요?
function solution(budget, priceArr) { let count = 0; priceArr.sort((arr1, arr2) => (arr1[0] + arr1[1]) - (arr2[0] + arr2[1])); for (const index in priceArr) { if (budget - priceArr[index][0] + priceArr[index][1] > 0) { budget -= priceArr[index][0] + priceArr[index][1]; count++; } else if (budget - (priceArr[index][0] / 2) + priceArr[index][1] > 0) { count++; break; } else { break; } } return count; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
new Map으로 계속 초기화하면 많이 비효율적일까요??
안녕하세요 선생님! 이중 루프로 풀다가 O(N)으로 풀어보려고 해봤는데요.. new Map으로 반복문 안에서 계속 초기화 해주는 건 너무 비효율 적일까요? function solution2(s, t) { let answer = 0; let lt = 0, rt = 0; let map1 = new Map(); for (const i of t) { if (map1.has(i)) { let val = map1.get(i); map1.set(i, ++val); } else map1.set(i, 1); } let map2 = new Map(map1); while (1) { if (rt > s.length) break; if (rt - lt === t.length && map2.size === 0) { answer++; map2 = new Map(map1); rt = ++lt; } if (!map2.has(s[rt])) { rt = ++lt; map2 = new Map(map1); } else { map2.delete(s[rt]); rt++; } } return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
결혼식- 정렬질문
시작시간과 끝나는 시간을 [시간,'s'] [시간,'e']으로나누고 시간 및 e ,s 순으로 정렬하는 과정에있어서 질문드립니다. 아래와 같이 12,15 와 ,15,20이 떨어져있는상태에서도 정상적으로 정렬이되긴하는데 sort에 의해 정렬되는 원리가 이해가 안됩니다. sort가 인접인자를 비교하여 정렬하는 방식으로 이해하고있는데 해설처럼 if문을 안에 작성했을시엔 아래와같이 12,15 와 15,20이 떨어져있는상태에서는 15가 인접해있지않아 if문에 걸리는지 궁금합니다. 그래서우선 앞의 숫자를 기준으로 정렬을해준후, 이후에 sort문을 한번더 작성하여 그떄 인접한 시간을비교하여 s와e의 구분을하는 정렬을 실행해줘야하지않나 생각됩니다.. let arr = [ [14, 18], [12, 15], [15, 20], [20, 30], [5, 14], ];
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드와 강의의 코드 실행시간의 차이가 클까요?
let answer = Number.MIN_SAFE_INTEGER; let arr = Array.from({ length: 73 }, () => 0); for (let x of times) { for (let i = x[0]; i < x[1]; i++) arr[i] += 1; } for (let i = 0; i < arr.length; i++) answer = Math.max(answer, arr[i]); count를 세는 새로운 배열을 만들고, 만들어진 배열의 최댓값을 출력하는 코드를 생각해봤습니다! 실행시간의 차이가 클까요?