월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이런 방식은 감점요소일까용
function solution(n,cars){ let answer =0; for(let x of cars){ if(x.toString().substr(-1) == n){ answer++ } } return answer; } 문자열변환후 마지막요소랑 같냐 방법으로했는데 10으로 나누면 되는거였네요ㅜㅜ 감점요소일까요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
혹시 강사님 이 풀이는 효율적이지 못할까요?
function solution(s1,s2) { let answer = 'YES'; console.log(s1,s2) let map1 = new Map(); for(let s of s1) { if(map1.has(s)) map1.set(s, map1.get(s)+1); else map1.set(s,1); } let map2 = new Map(); for(let s of s2) { if(map2.has(s)) map2.set(s, map2.get(s)+1); else map2.set(s,1); } for(let s of s1) { if(map1.get(s) !== map2.get(s)) answer = 'NO'; break; } return answer; } let str1 = 'abaCC'; let str2 = 'Caaab'; console.log(solution(str1,str2))
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
멘토링 문제가 이해가 안돼요 ㅠㅠ
교안 다운받아서 풀고 있는데, 섹션 4. 완전탐색(브루스포트) 의 멘토링 문제 의 설명이 이해가 가지 않아서 질문을 남기게 되었습니다. 조건 중에 A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다. 라는 내용이 있고 다음과 같은 테스트 케이스가 제공되어 있습니다. 1등이 제일 작은 숫자이며, 4등이 제일 큰 숫자라고 했을때, 제약조건 에 따르면 1번이라도 4등을 한 사람은 멘토가 될 수 없을 것입니다. 동시에 1번이라도 1등을 한 사람은 멘티가 될 수 없을 것이라고 생각합니다. 그렇다면, 멘토 자리에 올 수 있는 사람은 4번이며 멘티 자리에 올 수 있는 사람은 1번으로 제한되어 결과적으로 정답은 (4,1) 로 1을 출력 해야 한다고 생각했습니다.하지만 어쨰서 가 정답이 되는 것인지 이해할 수 없어서 질문을 남기게 되었습니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
에라토스테네스의 체, 이게 정말 빠른게 맞을까요? (깃 청부)
안녕하세요.다른 분 풀이에서 "에라토스테네스의 체"라는 것이 있어서,구글링 해보니 포스트에는 최적의 알고리즘 이라는 내용이 있었는데,실제로 속도 비교를 해보니 오히려 성능이 좋지 않다 라고 느꼈습니다.두 알고리즘에 사용된 소수의 특징 은 다음과 같았습니다.1. 1은 소수가 아니다. (해당 값일 경우 바로 중단)2. 2는 무조건 소수이다. (해당 값일 경우 바로 중단)3. 4 이상의 수는 Math.sqrt 까지만 그 값을 반복한다.문제 풀이에 2가지 쟁점을 잡아 풀었습니다.3-1. 3번 알고리즘을 사용하기 위하여, 2와 4 사이의 유일한 정수인 3은 소수이므로 바로 중단한다 함수를 실행한 파일 22-javascript-coding-test/index.js at main · unchaptered/22-javascript-coding-test (github.com) 성능 비교 (결과값은 모두 동일하게 출력) 기본 풀이 방법 코드 22-javascript-coding-test/2.Prime_numbers_basic.js at main · unchaptered/22-javascript-coding-test (github.com)에라토스테네스의 체22-javascript-coding-test/2.Prime_numbers_adv.js at main · unchaptered/22-javascript-coding-test (github.com)에라토스테네스의 체에서 몇 가지 개선점이 상상되기는 하지만,테스트할 수가 클수록 그 만큼 배열을 생성하는 데 걸리는 시간 이 길어지는 단점이 보이는데, 어째서 해당 알고리즘이 성능적으로 좋은지 모르겠습니다.아니면 제가 Array.prototype.filter() 를 통해서 새로운 배열을 만들고 있기 떄문에 성능 저하 가 발생하고 있는 것일까요?p.s. 강의 파일과 관련있는 코드라서 강사님 답변 받고 나면 바로 private 으로 돌려놓겠습니다.p.p.s 이 부분은 궁금해서 커뮤니티 같은데에 질문을 남겨서 의견을 받아도 될까요? ㅠㅠ
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문이 있습니다!
if(nx >= 0 && ny >= 0 && nx<n && ny<n && arr[nx][ny] < arr[i][j]) { count += 1; } arr[i][j]의 값이 더 클 때만 count +=1 해도 상관없는거 아닌가요?! 꼭 flag가 있어야 하는건가요?????
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
초보적인 문의입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 표현하신 dx dy 는 위치를 말씀하시는건가요?ㅠㅠ
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
무조건 첫번째 마구간에 들어가는 이유를 모르겠습니다.
function count(stable, dist){ let cnt=1, ep=stable[0]; for(let i=1; i<stable.length; i++){ if(stable[i]-ep>=dist){ cnt++; ep=stable[i]; } } return cnt; } 왜 무조건 ep=stable[0]; 넣어야 하는지 모르겠어요... 헷갈려요 ㅜ
- 해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강사님 질문있습니다.
강의에서 HTML파일로 문제를 푸는데, js파일로 문제를 풀지는 못하나요? 만약 풀 수 있다면 섹션1, 1번 문제를 js 방식으로 적어주셨으면 합니다.
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강사님 코드리뷰 부탁드릴게요
function getPresentStudent(mm,product) { let maxMoney = mm[1]; let answer = 0; product.sort((a,b)=> (a[0]+a[1]) - (b[0]+b[1])) for(let i = 0; i < product.length; i++) { let buySaleLeftMoney = maxMoney - (product[i][0]*0.5 + product[i][1]); let count = 1; for(let j = 0; j < product.length; j++) { if(j === i) continue; buySaleLeftMoney -= (product[j][0] + product[j][1]) count++; if(buySaleLeftMoney <= 0) { answer = count; break; } } } console.log(answer); } const budget = [5,28]; const product = [ [6,6],[2,2],[4,3],[4,5],[10,3] ] getPresentStudent(budget,product)
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
shift를 사용하지않고 풀어봤습니다.
let queue = Array.from({ length: n }, (_, i) => i + 1); let pos = 0; let cnt = 0; while (queue.length > 1) { if (++cnt === k) { queue.splice(pos, 1); cnt = 0; pos--; } pos = (pos + 1) % queue.length; } answer = queue[0]; return answer;
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 강사님. 코드 한번만 봐주시면 감사드리겠습니다.
function solution(S, T) { const N = T.length; let target = S.substr(0, N).split(""); let answer = 0; let isFlag = true; let hash = new Map(); for (let x of T) { if (hash.has(x)) hash.set(x, hash.get(x) + 1); else hash.set(x, 1); } for (let rt = N; rt <= S.length; rt++) { isFlag = true; let temp = new Map(Array.from(hash).slice()); for (let x of target) { if (!temp.has(x) || temp.get(x) === 0) { isFlag = false; break; } else { temp.set(x, temp.get(x) - 1); } } if (isFlag) answer++; target.push(S[rt]); target.shift(); } return answer; } let a = "bacaAacba"; let b = "abc"; console.log(solution(a, b));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다!!
forof로 하니까 프로그래머스에서 올바른 괄호 문제가 효율성 이슈가 발생하여 제 나름대로 풀어봤는데 리뷰 부탁드리겠습니당 <script> function solution(s) { let stack = []; let cnt = 0; for (let i = 0; i < s.length; i++) { if(s[i] === '(') cnt++; else if(s[i] === ')') cnt--; if(cnt < 0) return false; if(cnt === 0 && s[i] !== ')') stack.push(s[i]) } return stack.join(''); } let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)"; console.log(solution(str)); </script>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 강사님 저처럼 풀면 시간복잡도가 n log n 인건가요?
투 포인터가 아닌 위처럼 풀면 시간 복잡도가 나빠서 강사님 처럼 푸는게 나을까요? <script> function solution(arr1, arr2){ let answer = [ ...arr1, ...arr2 ] answer.sort((a,b) => (a-b)) return answer; } let a=[1, 3, 5]; let b=[2, 3, 6, 7, 9]; console.log(solution(a, b)); </script>
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다!!
강사님 아래와 같은 코드는 어떤지 리뷰 부탁드리겠습니다!
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 질문드립니다.
아래처럼 tmp 배열을 사용하지 않고 문자열을 DFS의 매개변수로 줬을때 성능면에서 차이가 있을가요? function solution(n, m) { let answer = []; function DFS(L, str) { if (L === m) { answer.push(str.trim()); } else { for (let i = 1; i <= n; i++) DFS(L + 1, str + i + " "); } } DFS(0, ""); return answer; }
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
궁금한게 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비안녕하세요 선생님 궁금한게 있어서 질문 남깁니다! max = x.length 면 결국엔 max는 9가 되는데 저 부분이 answer = x와 무슨 관계인지 이해가 되질 않습니다. x의 길이를 구한것이지 x를 구한게 아닌데 어떻게 x를 answer 에 대입할 수 있는건가요 ??
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
4번 answer 정의
4번 문제에 let answer = 0; 이 아닌 let answer;만 정의 한 후 코드를 돌렸을 때 NaN이란느 값을 얻었습니다. answer을 초기화 해주지 않았기 때문인가요?
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
수강 전 풀이인데, queue를 안썼네요ㅜㅜ 이 코드는 반례가 있나요?
function solution(need, plan) { need = need.split(""); let needSub = []; for (let i = 0; i < need.length; i++) { for (let j = 0; j < plan.length; j++) { if (need[i] === plan[j]) { needSub.push(plan[j]); // console.log(need); // console.log(needSub); } } } // console.log(String(need)); // console.log(String(needSub)); if (need.join("") !== needSub.join("")) { return "fail"; } return "success"; } let a = "CBA"; let b = "CBDAGE"; console.log(solution(a, b)); 선생님 강의 보며 queue사용해서 하는 법 다시 알게되었습니다. 감사해요~
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
while(que.length !== 1)로 바로 설정하면 조건 성립이 안되는 경우가 있을까요>?
## 접근방식 - queue 큐 자료구조 활용, 선입선출 특징 활용하기 => 왕자의 번호를 순서대로 조회하며, 특정 숫자가 k가 3인경우? 3번쨰 순서인 왕자가 제외되는 것이다. => k-1 을 하며 특정숫자 직전까지 왕자를 맨 뒷 순서로 보내고, 그 다음 k번째인 왕자는 제거한다. => 반복하다보면 1명만 남을 것 ## 풀이 1. 왕자들을 순서대로 줄세울 que 변수를 선언 [] 을 할당한다. 2. for 문) 1번부터 n번 까지의 왕자까지 순서대로 담는다. (줄 세운다) 3. while 문) que의 길이가 1이 아닌 경우 반복, 길이가 1이되면 while문을 탈출한다. => 왕자가 1명 남은 경우 탈출하게 설정 4. for 문) 왕자의 수가 1부터 k 특정 숫자보다 작을 떄까지만, 4-1. 배열의 맨 앞 요소를 shift() 빼서 que에 push() 담아준다. 4-2. 특정 숫자 k번 왕자일 경우 shift() 제거한다. 5. while문 que.length ===1 인경우 while문을 탈출한다. 6. que에 마지막 남은 que[0] 왕자의 번호를 출력한다. function solution(n, k) { let answer; let que = []; for (let prince = 1; prince <= n; prince++) { que.push(prince); console.log(que); } while (que.length !== 1) { for (let prince = 1; prince < k; prince++) { que.push(que.shift()); } que.shift(); } return que[0]; } console.log(solution(8, 3));
- 미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
선생님 덕분에 스택이 이해가 되고 풀리는 것 같아요 ㅠㅠ!
접근방식이 헷갈릴때 접근방식만 듣고 다시 풀어보면 바로 풀리네요 ㅜㅜ 항상 감사해요!! - tip. () 괄호가 나오는 문제는 보통 stack 활용하면 된다. > 문제 : 쇠막대기와 레이저의 배치를 나타내는 괄호가 주어졌을 때, 레이져로 잘린 쇠막대기 조각의 총 개수를 출력해라 > 입력 : 1. 모든 레이저는 ‘( )’ 으로 표현된다. 2. 쇠막대기의 왼쪽 끝은 여는 괄호 ‘ ( ’ 로, 오른쪽 끝은 닫힌 괄호 ‘) ’ 로 표현된다. - 조건 1) 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. => 긴 쇠막대기 위에 놓을때 쇠막대기의 양 끝점은 겹치지 않고, 완전히 그 안에 포함되게 놓인다. - 조건 2) 쇠 막대기를 자르는 레이저는 1개 이상이다. - 조건 3) 레이저는 쇠막대기의 양 끝점과 겹치지 않는다. ## 접근방식 1. stack 스택자료구조 활용하기! 2. 나열된 괄호를 조회하며 쇠막대기 왼쪽 끝인, ( 여는 괄호를 만날경우? ( 여는 괄호가 반복되면 쇠막대기 개수가 추가된다. => 쇠막대기 ( 를 모두 stack[]에 담아준다. (쇠막대기 개수 증가) 3. ) 닫는 괄호를 만날경우? => stack []에 있는 "("여는 괄호 1개를 제거한다. **")" 닫는괄호는 꼭 두가지 경우를 생각해야한다.** 4. 레이져인 경우 => stack[] 가장 위(바로 직전)에 여는 괄호일 경우 "()" 레이져 4-1. 레이져가 나올때마다 "()" => stack[] ( 여는괄호 하나 제거 후, 4-2. Stack[]에 남아있는 괄호의 개수(잘려진 쇠막대기 조각 개수)를 더해준다. 5. 쇠막대기의 끝인 경우 => stack[] 가장 위에 있는 괄호가 ")" 닫는 괄호일 경우 쇠막대기의 마지막 끝이다. 5-1. ) 닫는괄호의 짝인 ( 여는괄호를 stack[]에서 삭제하며 +1 을 더해준다. => 쇠 막대 한개가 완성되면, 레이져로 잘리고 남은 쇠조각 1개만 남기 때문에 +1을 해주는 것이다. ## 풀이 1. 개수를 세줄 변수 cnt를 선언하고 초기값 0 할당, ( 괄호를 담을 변수 stack선언하고 [] 할당한다. 2. for 문으로) str 괄호가 정렬되어있는 문자열을 순서대로 모두 조회한다. 3. if문) ( 를 만날 경우? => stack []에 반복해서 (를 담아준다. => push() 4. else문) ) 를 만날 경우? 5. if 문) str[i-1] 직전 요소가 "("인 경우? => stack[]맨 위의 (를 제거한다. => pop() => stack[]에 담긴 요소개수 stack.length 를 cnt에 더해준다. 6. else문) str[i-1] 직전 요소가 ")"인 경우? => stack[] 맨 위의 (를 제거한다. => pop() => cnt 개수에 +1을 더해준다. 7. 모든 요소를 조회하여, for 문이 종료되면 레이져로 잘린 쇠조각의 개수 cnt를 출력한다. ### 선생님 풀이와 다른 점 ")" 를 만날 경우? 무조건 stack[]의 맨 위 ( 괄호를 제거해야하니깐, 아래 코드처럼 적으면 pop()을 한번만 실행하면된다. else { stack.pop(); if (str[i - 1] === "(") { cnt += stack.length; } else { cnt++; } --> <script> function solution(str) { let cnt = 0; let stack = []; for (let i = 0; i < str.length; i++) { if (str[i] === "(") { stack.push(str[i]); } else { if (str[i - 1] === "(") { stack.pop(); cnt += stack.length; } else { stack.pop(); cnt++; } } } return cnt; } let str = "()(((()())(())()))(())"; console.log(solution(str)); </script>영 관련 문의는 1:1 문의하기를 이용해주세요.