월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
정답인것 같은데 어떤가요?
function solution([n, m], arr) { let answer = Number.MIN_SAFE_INTEGER; function DFS(L, sumScore, sumTime) { if (sumTime > m) return; if (L === n) { answer = Math.max(answer, sumScore); } else { DFS(L + 1, sumScore + arr[L][0], sumTime + arr[L][1]); DFS(L + 1, sumScore, sumTime); } } DFS(0, 0, 0); return answer; } console.log( solution( [5, 20], [ [10, 5], [25, 12], [15, 8], [6, 3], [7, 4], ] ) ); 강사님이 시키는대로 종이에 그려 가보고 그다음 다시 직접 문제를 풀어보는 연습을 하니까 같은 유형의 문제를 이제 직접 풀 수 있게 되었어요.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다.
영상 안 보고 풀어봤는데 while문 하나로만 풀었습니다. 부탁드려요// N일 동안 매출기록을 주고 연속된 K일 동안의 최대 매출액이 얼마인지 구하라. function solution(n = 0, k = 0, arr = []) { let answer = 0; let left = 0; let right = 0; let sum = 0; while (right < n) { // 0~k-1 까지 right로만 움직임. if (right < k) { sum += arr[right++]; answer = sum; } else if (right >= k) { sum -= arr[left++]; sum += arr[right++]; if (sum > answer) answer = sum; } } return answer; } console.log(solution(10, 3, [12, 15, 11, 20, 25, 10, 20, 19, 13, 15])); // 56 // 11 20 25 => 56
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다!
// 자릿수끼리의 합이 제일 많은 것을 출력. // 같은 경우 원래 숫자가 더 높은 쪽을 출력 function solution(n = 0, arr = []) { let answer = 0; let max = Number.MIN_SAFE_INTEGER; const splitNums = arr.map((val) => (val + "").split("")); for (let i = 0; i < splitNums.length; i++) { const temp = splitNums[i].reduce((prev, cur) => +prev + +cur, 0); if (temp > max) { max = temp; answer = arr[i]; } else if (temp === max) answer = arr[i]; } return answer; } console.log(solution(7, [128, 460, 603, 40, 521, 137, 123])); // 137 혼자 풀어봤습니다.. for문 안에 배열 메서드가 들어가는게 좀 이상한 것 같은데 이렇게 써도 무방한지 여쭙고싶습니다.혹은 수정할 점이 있다면 조언해주시면 감사하겠습니다!
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
혼자 푼 것 코드리뷰 부탁드립니다!
// 한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리 function solution(str = "", char = "") { let answer = []; let count = 0; for (let i = 0; i < str.length; i++) { if (str[i] === char) { count = 0; answer.push(count); } else { count++; answer.push(count); } } count = 1; for (let i = answer.length - 1; i >= 0; i--) { if (i > 0 && answer[i - 1] > count) { answer[i - 1] = count; count++; } else { count = 1; } } return answer; } console.log(solution("teachermode", "e")); // 1 0 1 2 1 0 1 2 2 1 0혹시나 반례나 수정할 곳 있으면 조언 부탁드려요!
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
answer 변수 없이 풀기
function solution(n) { if (n == 0) return ""; return solution(Math.floor(n / 2)) + String(n % 2); }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 될까요...?
function solution(n = 0, arr = []) { let answer = []; const sortedArr = [...arr].sort((a, b) => b - a); answer = arr.map((val) => sortedArr.indexOf(val) + 1); return answer; } console.log(solution(5, [76, 92, 92, 100, 76])); // 4 2 2 1 4 막 2중 for문을 돌릴지, 돌리게 된다면 동일 점수 사람끼리 같은 등수를 해주는 조건문 이것저것 생각하다가 이렇게 한번 작성해서 돌려봤는데 여러 케이스에 부합하는 것 같아서 여쭤봅니다!
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
shift, splice연산
안녕하세요shift 연산을 사용하면 원소값들이 한칸씩 다 당겨진다고 알고 있는데 맞나요??만약에 맞다면 N이 클경우는 원형큐같이 직접구현해서 사용하는게 시간복잡도상 더 좋은 코드일까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮을까요? sort와 map, while을 이용하여 풀었습니다.
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(arr) { let answer = []; let arrCopy = arr.map((item) => item); let corrarr = arrCopy.sort(function (a, b) { return b - a; }); for (let i = 0; i < arr.length; i++) { let j = 0; while (j < corrarr.length) { if (arr[i] == corrarr[j]) { answer.push(j + 1); break; } j++; } } return answer; } let arr = [87, 89, 92, 100, 76, 89]; console.log(solution(arr)); </script> </body> </html>이렇게 풀면 문제가 있을까요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해쉬에서 맵을 쓰는 이유?
function solution(s) { let answer = s[0]; let count = {}; for (const i of s) { if (count[i]) count[i] += 1; else count[i] = 1; } for (const i in count) { if (count[i] > count[answer]) answer = i; } return answer; } let str = "BACBACCACCBDEDE"; console.log(solution(str)); 혼자서 풀어봤을 때는 맵을 쓰지는 않았는데, 혹시 해쉬 구조에서 객체 대신 맵을 사용해서 얻을 수있는 이점이 어떤 게 있을까요? 또, 위와 같은 방법으로 풀었을 때 문제는 없을까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
indexOf를 사용해서 반복문 하나 줄여봤습니다
function solution(test) { let answer = 0; let n = test.length; let studentNum = test[0].length + 1; // i는 멘토가 될 수 있는 학생 // j는 멘티가 될 수 있는 학생 for (i = 1; i < studentNum; i++) { for (j = 1; j < studentNum; j++) { if (i === j) continue; let flag = 0; // k는 n차 시험의 결과 for (k = 0; k < n; k++) { if (test[k].indexOf(i) < test[k].indexOf(j)) { flag++; } else { break; } } if (flag === n) answer++; } } return answer; } 각 시험 회차의 인덱스 번호가 학생의 번호다보니까 indexOf를 사용하면 반복문 하나 줄이고도 풀 수 있지 않을까 해서 이렇게 해봤습니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다!
function addEachDigit(num) { const str = String(num); const addedNum = str.split("").reduce((acc, prev) => acc + Number(prev), 0) return addedNum; } function solution(n, arr) { let answer = 0; for (const i of arr) { const addNum = addEachDigit(i); const maxAddNum = addEachDigit(answer); if (addNum > maxAddNum) answer = i; if (addNum == maxAddNum) { if (i > answer) { answer = i; } } } return answer; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr)); 늘 감사합니다.제가 풀어본 문제 중에서는 처음으로 선생님의 풀이와 완전히 다른 방식이라 이런 방식은 어떨지 견해를 들어보고 싶습니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 이렇게 작성해도 괜찮나요? 혹시 시간 복잡도는 어떻게 되는지 궁금합니다!
string의 slice메소드를 활용해서 다음과 같이 작성해보았는데 이렇게 해도 문제는 없는지, 시간복잡도는 어떻게 되는지 궁금합니다! // 두 문자열 아나그램인지 비교하는 함수 function compareStr(target, str) { // target문자열을 담은 hash 만들기 let targetH = new Map(); for (let x of target) { if (targetH.has(x)) targetH.set(x, targetH.get(x) + 1); else targetH.set(x, 1); } // target과 str이 같은지 비교 for (let x of str) { if (!targetH.has(x) || targetH.get(x) === 0) return false; targetH.set(x, targetH.get(x) - 1); } return true; } function solution(s, t) { let answer = 0; let n = t.length; // target의 길이 for (let i = 0; i <= s.length - n; i++) { let slicedStr = s.slice(i, i + n); // 문자열을 target 길이 맞춰서 잘라주기 // 비교해서 true이면 answer올리기 if (compareStr(t, slicedStr)) answer++; } return answer; } let a = "bacaAacba"; let b = "abc"; console.log(solution(a, b));감사합니다!
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 방법으로 풀이했는데 삽입 정렬이 맞을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 0; i < arr.length; i++) { for (let j = 1; j < arr.length; j++) { if (arr[j - 1] > arr[j]) { [arr[j - 1], arr[j]] = [arr[j], arr[j - 1]]; } } } return answer; } // test case console.log(solution([11, 7, 5, 6, 10, 9]));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
미로 탐색 문제 질문 있습니다.
미로 탐색에서 재귀에 진입하기 전 board에 표시를 할 때,boarr[nx][ny] = 1이 맞나요?해당 자리에 1로 표시를 해놓고 다음으로 넘어가는 개념이니까arr[x][y] = 1이렇게 하는게 맞지않나라는 생각이 드는데혹시 제가 잘못 이해를 한 걸까요?결과는 똑같이 나와서 의문이네요.// 강사님의 답 if(nx >= 0 && nx <= 6 && ny >= 0 && ny <= 6 && board[nx][ny] === 0){ board[x][y] = 1 DFS(nx,ny) board[x][y] = 0 } // 저의 답 if(nx >= 0 && nx <= 6 && ny >= 0 && ny <= 6 && board[nx][ny] === 0){ board[x][y] = 1 ★★★ DFS(nx,ny) board[x][y] = 0 ★★★ }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이런식으로 풀어도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.function solution(n, arr) { let answer = 'NO'; let ch = Array.from({ length: n }, () => 0); function DFS(v) { if (v === n - 1) { let aSum = 0; let bSum = 0; for (let j = 0; j < n; j++) { if (ch[j]) aSum += arr[j] //0이면 else bSum += arr[j] //1이면 } if (aSum === bSum) return answer = 'YES' } else { ch[v] = 1; DFS(v + 1) ch[v] = 0 DFS(v + 1) } } DFS(0); return answer } console.log('answer', solution(6, [1, 3, 5, 6, 7, 10]))
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
삽입정렬로 생각이 안나서 다르게 풀어봤습니다.
삽입 정렬로 혼자 풀어보려고 했는데 도무지 생각이 안나서 버블정렬? 로 푼것 같습니다사실 버블정렬도 아닌것 같긴한데혹시 이렇게 풀면 너무 비효율적이거나 반례가 있을까요?function solution(s, arr) { let answer = new Array(s).fill(0); answer[0] = arr[0]; for (let i = 1; i < arr.length; i++) { if (answer.includes(arr[i])) { for (let j = s - 1; j > 0; j--) { if (answer[j] === arr[i]) { [answer[j], answer[j - 1]] = [answer[j - 1], answer[j]]; } } } else { answer.pop(); answer.unshift(arr[i]); } } return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
투포인터 없이 풀어 봤는데 반례라거나 시간복잡도의 문제가 있을까요...?
function isSame(map1, map2) { if (map1.size !== map2.size) return false; for (const [key, val] of map2) { if (!map1.has(key) || map1.get(key) !== val) return false; } return true; } function solution(s, t) { let answer = 0; const map1 = new Map(); const map2 = new Map(); const n = t.length; const ss = s.slice(0, n); for (const s of t) { if (map1.has(s)) { map1.set(s, map1.get(s) + 1); } else { map1.set(s, 1); } } for (const s of ss) { if (map2.has(s)) { map2.set(s, map2.get(s) + 1); } else { map2.set(s, 1); } } if (isSame(map1, map2)) answer++; for (let i = n; i < s.length; i++) { map2.delete(s[i - n]); map2.set(s[i], map2.get(s[i]) ? map2.get(s[i]) - 1 : 1); if (isSame(map1, map2)) answer++; } return answer; } const s = "bacaAacba"; const t = "abc"; console.log(solution(s, t)); 슬라이딩 윈도우로 처음 t만큼 잘라서 비교한 이후 부터 돌면서 처리 했는데 다른 문제가 있을까요...?
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
section5 - 7번 질문 드립니다.
function solution(words1, words2) { const firstWordMap = new Map(); const secondWordMap = new Map(); let answer = "YES"; // 단어 구성 문자열 판별 for (let item of words1) { if (firstWordMap.has(item)) { firstWordMap.set(item, firstWordMap.get(item) + 1); } else { firstWordMap.set(item, 1); } } for (let item of words2) { if (secondWordMap.has(item)) { secondWordMap.set(item, secondWordMap.get(item) + 1); } else { secondWordMap.set(item, 1); } } // 아나그램 판단 for ([key, value] of firstWordMap) { if (secondWordMap.has(key) && secondWordMap.get(key) === value) { answer = "YES"; } else { return "NO"; } } return answer; } // test case console.log(solution("AbaAeCe", "baeeACA")); console.log(solution("abaCC", "Caaab")); 위와 같이 map을 두개 만들어 비교하는 방법은 별로일까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
혼자 풀어봤는데요...
function solution(n, arr) { // 소수를 판별하는 함수 function isPrime(num) { if (num === 1) return false; if (num === 2) return true; for (let i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) return false; } return true; } const answer = arr.filter((num) => { let reverseNum = Number(String(num).split('').reverse().join('')); if (isPrime(reverseNum)) { console.log(reverseNum); return reverseNum; } }); return answer; } const n = 9; const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(n, arr));filter 내의 조건문에서 isPrime 함수에서 판별하고 true인 것을 콘솔에 출력해보면23, 2, 73, 2, 3 이렇게 나오는데밑에 return reverseNum;을 하고 나서 answer을 보면[ 32, 20, 370, 200, 30 ] 이렇게 출력되는데 왜 숫자가 다르게 나오는 건가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션2 공통원소 구하기 정렬 없이 해봤는데 괜찮을까요??
<html> <body> <script> function solution(arr1, arr2) { const answer = []; const n = arr1.length; const m = arr2.length; let p1 = (p2 = 0); while (p1 < n) { if (arr1[p1] === arr2[p2]) { answer.push(arr1[p1++]); p2++; } else { p1++; } } p1--; while (p2 < m && p1 >= 0) { if (arr2[p2] === arr1[p1]) { answer.push(arr2[p2++]); p1--; } else { p1--; } } return answer.sort((a, b) => a - b); } const arr1 = [1, 3, 9, 5, 2]; const arr2 = [3, 2, 5, 7, 8]; console.log(solution(arr1, arr2)); </script> </body> </html>위와 같이 p1먼저 돌고 그 다음에 p2돌면서 p1을 뒤에서부터 찾았는데 이렇게 하는건 별로 일까요...?