월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
반례가 있는지 알 수 있을까요?
function solution(arr) { let result = []; const convertArray = arr; for (let i = 0; i < arr[0].length - 1; i++) { const mento = arr[0][i]; for (let j = 0; j < arr.length; j++) { for (let k = 0; k < arr.length; k++) { const menti = arr[k][j]; if (j > i) { break; }; if (j !== k) { if (mento <= menti) { const index = convertArray[k].indexOf(menti); convertArray[k][index] = 'not'; } }; }; }; }; for (let i = 0; i < arr[0].length - 1; i++) { const mento = arr[i][i]; for (let k = 0; k < arr[0].length; k++) { const menti = convertArray[i][k]; if (typeof menti === 'number' && mento !== menti && typeof mento === 'number') { result.push([mento, menti]); }; }; } return result.length; }; 저는 위처럼 풀었습니다.제가푼건 O(n^3) + O(n^2)인 것 같은데제가 푼 방법에서 반례가 있을까요?다른 케이스들로 시뮬레이션 돌렸는데 잘 생각이 나지 않아 질문드립니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이
강의 듣기 전에 혼자 풀어보았는데function solution(board, moves) { let answer = 0, stacks = Array.from({ length: board[0].length }, () => []), moveStack = []; for (let x of board.reverse()) { // [3,5,1,3,1] for (let i = 0; i < board[0].length; i++) { if (x[i] === 0) continue; stacks[i].push(x[i]); } } for (let m of moves) { m--; if (stacks[m].length === 0) continue; // 해당 번호에 인형 다 꺼냈을때 let top = stacks[m].pop(); if (moveStack.length === 0) { // moveStack 에 아무것도 없을때 moveStack.push(top); continue; } let movesTop = moveStack.pop(); if (movesTop === top) answer += 2; else { moveStack.push(movesTop, top); } } return answer; }저는 처음에 board 배열 형태를 pop하기 쉽게 변형한 뒤에 moves 따라 계산했는데이 코드로 짜면 이중 for 문 때문에 시간 효율이 안좋을까요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
map 을 두개 만들기
제가 강의 듣기전에 미리 풀어봤는데선생님 코드와 다르게 저의 경우function solution(str1, str2) { let answer = "YES", m1 = new Map(), m2 = new Map(); for (let i = 0; i < str1.length; i++) { m1.has(str1[i]) ? m1.set(str1[i], m1.get(str1[i]) + 1) : m1.set(str1[i], 1); m2.has(str2[i]) ? m2.set(str2[i], m2.get(str2[i]) + 1) : m2.set(str2[i], 1); } for (let [key, value] of m1) { if (!m2.has(key)) return "NO"; if (m2.get(key) !== value) return "NO"; } return answer; } str1 , str2 각각 map으로 만든뒤 for문 돌려서 비교했는데 이렇게 풀면 메모리 낭비가 심한 풀이일까요 ? 근데 그다음 영상 '모든 아나그램 찾기' 문제에션 두 문자를 map으로 변형한뒤 비교한 것 같은데, 어떤 상황일 때 어떤 풀이 방법을 선택해야하는지 알수있을까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
slice 활용
정답 코드 중에서while(p1<n) answer.push(arr1[p1++]);while(p2<n) answer.push(arr2[p2++]);대신 if (a < n) answer.push(...arr1.slice(a)); if (b < n) answer.push(...arr2.slice(b));slice 활용해서 풀어도 괜찮을까요? (a는 p1이고, b는 p2입니다)
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 강의 코드에서 16-17번째 줄 코드 질문
안녕하세요 강의 듣다가 궁금한점이 있어서 질문 드립니다..!해당 강의 16분 37초 기준으로 16-17번째 줄 코드를 보면if(j!==i && (product[j][0]+product[j][1])>money) break; if(j!==i && (product[j][0]+product[j][1])<=money){이렇게 적으셨는데 break 하는 부분에 꼭 굳이 j!==i 도 적어야하나요 ??저의 경우function solution(bud, product) { let answer = 0, total = product.flat().reduce((prev, curr) => prev + curr); product.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); for (let i = 0; i < product.length; i++) { // 50% 할인 쿠폰 적용할 상품 for 문 돌리기 let money = bud - (product[i][0] / 2 + product[i][1]); // 사용 가능한 금액 let cnt = 1; // 할인받은 애는 되니까 1 시작 for (let j = 0; j < product.length; j++) { if (i === j) continue; if (money < product[j][0] + product[j][1]) break; money -= product[j][0] + product[j][1]; cnt++; } answer = Math.max(answer, cnt); } return answer; }이렇게 i===j 를 만나면 continue 로 하고 예산이 넘어갈때만 break 두돌록 했는데 이렇게 잓성해도 괜찮을까요 ?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이
강의 보기전에 혼자 풀어보았는데 저의 경우에는 미리 순위를 추출해서 result ㄹ라는 변수에 저장한뒤 for문을 돌려서 result 에 있는 순위를 비교해서 답을 내도록 했는데 혹시 틀렸거나 비효율적이라면 어떤 점이 문제인지 알려주시면 감사하겠습니다..!function solution(test) { let a = test.length, b = test[0].length; let result = Array.from({ length: b + 1 }, () => []); // [[], [], [], [], []] let answer = 0; for (let x of test) { // [3,4,1,2] for (let i = 0; i < b; i++) { result[x[i]].push(i + 1); } } for (let i = 1; i < b + 1; i++) { // 0~4 for (let j = 1; j < b + 1; j++) { // result[i] 랑 result[j] 비교 if (i === j) continue; let isMento = true; for (let n = 0; n < a; n++) { if (result[i][n] <= result[j][n]) { isMento = false; break; } } isMento && answer++; } } return answer; } let arr = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(arr));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
따로 function 빼기
제가 강의 듣기 전function solution(num) { let answer = []; for (let x of num) { let isPrime = true; x = Number(x.toString().split("").reverse().join("")); if (x <= 1) continue; for (let i = 2; i <= x / 2; i++) { if (x % i === 0) { isPrime = false; break; } } isPrime && answer.push(x); } return answer; } let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(arr)); 이런식을로 풀었는데영상에 보니까 isPrime(n) 을 따로 빼서 하신것같은데이렇게 함수를 따로 빼야하는 이유가 있는건가요??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문
제가 영상 보기 전 혼자 풀어보았는데function solution(n, arr) { let answer = 0, max_sum = 0; for (let x of arr) { let sum = 0, temp = x; while (temp) { sum += temp % 10; temp = Math.floor(temp / 10); } if (max_sum < sum || (max_sum === sum && answer < x)) { answer = x; max_sum = sum; } } return answer; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr)); 저는 if 문을 (max_sum < sum || (max_sum === sum && answer < x)) 이렇게 하나로 묶어서 썼는데 괜찮을까요 ? 그리고 선생님께서 max를 초기화할때 Number.MIN_SAFE_INTEGER 로 하셨는데 어차피 각자리수의 합이 0보다는 클것이라는 생각이 들어서 저의 경우엔 0으로 초기화 했는데 괜찮을까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for 문을 1부터 마지막 인덱스까지
안녕하세요 제가 강의 보기전에 혼자 풀어봤는데function solution(s) { let answer = s[0]; let cnt = 1; for (let i = 1; i < s.length; i++) { if (s[i] === s[i - 1]) { cnt++; continue; } if (cnt > 1) { answer += cnt + s[i]; cnt = 1; } else { answer += s[i]; } } return answer; } let str = "KKHSSSSSSSE"; console.log(solution(str)); 저 같은 경우 미리 answer 에 첫번째 글자를 넣어서 시작했고for 문을 1부터 시작해서 그 전의 값과 비교하는 식으로했는데 이렇게 풀어도되는걸까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
max와 findindex 사용해서 풀어도 되나요?
function solution(arr) { let answer = Array.from({ length: arr.length }, () => 0); let rank = 1, max = Number.MAX_SAFE_INTEGER; for (let i = 1; i <= arr.length; i++) { let idx = arr.findIndex((val) => val === Math.max(...arr)); if (arr[idx] === max) { // 동점자이면 answer[idx] = rank; } else { answer[idx] = i; rank = i; } max = arr[idx]; arr[idx] = -1; } return answer; } let arr = [87, 89, 92, 100, 76]; let arr2 = [20, 20, 20, 10, 50, 15]; console.log(solution(arr)); 저 혼자 풀었을 때 이중 for문이 아닌 위와 같이 풀었는데 혹시 이렇게 풀어도 되는걸까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
혹시 예외가 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(board, moves) { let answer = 0; //count let stack = []; //바구니 //크레인 for문 돌리기 for (const x of moves) { //크레인 위치, index에 맞게 설정 let idx = x - 1; //borad 체크 for (let i = 0; i < board.length; i++) { //인형 const v = board[i][idx]; //0 & null이면 그냥 넘기기 > 다음값을 넣어야 함 //null = 이미 바구니에 들어간 값 if (v !== 0 && v !== null) { //이미 바구니에 있는 경우 if (v === stack.at(-1)) { let pop = stack.pop(); answer += 2; } else stack.push(v); board[i].splice(idx, 1, null); break } } } 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));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
splice로 써도 될까요?..?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. <script> function solution(arr){ let answer = arr; let [max, idx] = [-1, -1]; for (let i = 0; i < arr.length; i++){ max = Math.max(...arr) idx = arr.indexOf(max) arr.splice(idx, 1) // 배열 내 값 제거 arr.splice(idx, 0, i+1) // 제거한 자리에 max 순서 넣기 } return answer; } let arr=[87, 89, 92, 100, 76]; // 4 3 2 1 5 console.log(solution(arr)); </script> 섹션2의 5번 등수구하기문제입니다
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다음과 같이 풀었는데 괜찮은가요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키<html> <head> <meta charset="UTF-8"> <title>출력결과</title> </head> <body> <script> function solution(arr){ let answer=0 ; let max =0; for(let i=0; i<arr.length; i++){ if(arr[i]>max){ max=arr[i] answer++ } } return answer; } let arr=[130, 135, 148, 140, 145, 150, 150, 153]; console.log(solution(arr)); </script> </body> </html>며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 다음과 같이 작성하였는데 이상이 없을까요?<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(s) { let answer = ""; for (let i = 0; i < s.length - 1; i++) { if (s[i].length > s[i + 1].length) { answer = s[i]; } else { answer = s[i + 1]; } } return answer; } let str = ["teacher", "time", "student", "beautiful", "good"]; console.log(solution(str)); </script> </body> </html>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다 :)
안녕하세요 선생님 😀강의 잘 보고 있습니다.저는 count 변수를 두고 값을 저장하고 i값을 변경하여 사용하였는데 이렇게 작성해도 되는지 궁금하여 질문을 올리게 되었습니다. 또 아래와 같이 for문 안에 있는 i 값을 변경해도 괜찮은지도 궁금합니다! function solution(k: number, arr: number[]): number { let sum: number = 0; let count: number = 0; let max: number = 0; for (let i = 0; i < arr.length; i++) { if (count < k) { sum += arr[i]; count++; } else { if (max < sum) { max = sum; } i = i - count; count = 0; sum = 0; } } return max; }감사합니다
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 평가 부탁드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.function solution(m,input){ var count=0 for(let lt=0; lt<input.length; lt++){ var sum=0 for(let rt=lt; rt<input.length; rt++){ sum+=input[rt] if (sum>m) break count++ } } document.write(count) } solution(5,[1, 3, 1, 2, 3]);
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
lt, rt 사용하지 않아도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이런식으로 해도 괜찮을까요?function handleCheck(sH, tH) { for (const [key, value] of tH) { //sH에 tH에 있는 값이 없으면 false return if (!sH.has(key)) return false //값이 같지 않으면 false return if (value !== sH.get(key)) return false } return true } function solution(s, t) { let answer = 0; let tH = new Map(); let sH = new Map(); //t for (const x of t) { if (tH.has(x)) tH.set(x, tH.get(x) + 1); else tH.set(x, 1) } //s 윈도우 생성 for (let i = 0; i < t.length - 1; i++) { if (sH.has(s[i])) sH.set(s[i], sH.get(s[i]) + 1); else sH.set(s[i], 1) } for (let i = sH.size; i < s.length; i++) { //윈도우에 추가 if (sH.has(s[i])) sH.set(s[i], sH.get(s[i]) + 1); else sH.set(s[i], 1) //비교, sH랑 tH 사이즈 체크 if (sH.size === tH.size) { //비교, sH랑 tH 값이 맞는지 체크 > 맞으면 카운트+ if (handleCheck(sH, tH)) answer++ } //sH 앞에 값 빼기 //sH 맨 앞 = s에서 현재 index+1 - tH사이즈 let idx = i + 1 - tH.size; //앞에 값 빼기 sH.set(s[idx], sH.get(s[idx]) - 1) //뺀 값이 0이면 삭제 sH.get(s[idx]) === 0 && sH.delete(s[idx]) console.log('----------------------') } return answer; } let a = "bacaAacba"; let b = "abc"; console.log(solution(a, b));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 풀어도 될까요 ?아래와 같은 경우에 시간복잡도는 어떻게 될까요 ...?const solution = (k, arr) => { let answer = Array.from({ length: k }, () => 0); for (let i = 0; i < arr.length; i++) { if (!answer.includes(arr[i])) { answer.unshift(arr[i]); answer.pop(); } else { let tmp = answer.filter((v) => v !== arr[i]); tmp.unshift(arr[i]); answer = tmp; } } return answer; }; console.log(solution(5, [1, 2, 3, 2, 6, 2, 3, 5, 7]));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
제 실력이 미흡해서 그런지 푸는데 엄청 오래 걸렸습니다...
포기 하지 않고 끝까지 풀어서 정답을 맞추게 된것 같습니다.문제가 생각 보다 어려운것 같습니다 ㅠㅠfunction solution(arr) { let answer = []; let mento = []; const maxNum = []; for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { const index = arr[i].indexOf(arr[0][j]); for (let k = 0; k < index; k++) { maxNum.push([arr[0][j], arr[i][k]]); } for (let z = 0; z < arr[i].length; z++) { if (j < z) { mento.push([arr[i][j], arr[i][z]]); } } } } for (p = 0; p < maxNum.length; p++) { mento = mento.filter( (t) => !(maxNum[p][0] === t[0] && maxNum[p][1] === t[1]) ); } answer = new Set(mento.map((v) => v.join(""))); return [...answer].length; } const question = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(question));좋은 코드는 아닌것 같지만, 최대한 노력을 했습니다const question = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(question)); let arr = [[1, 2, 3, 4, 5]]; console.log(solution(arr)); let arr2 = [ [19, 15, 4, 17, 12, 18, 6, 3, 11, 14, 1, 8, 13, 9, 2, 20, 5, 16, 10, 7], [5, 20, 18, 17, 14, 11, 19, 3, 10, 16, 6, 8, 13, 9, 2, 12, 4, 7, 1, 15], ]; console.log(solution(arr2));다른 답들도 다 정답은 나옵니다.