묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
공부방법 질문 드립니다.
멘토님 안녕하십니까?1주차 문제 풀이 시작하려고 하고 있습니다. 제가 visual studio 환경에서 컴파일 해본 뒤 예상대로 출력되면 백준에 복붙해서 하는 방식으로 진행을 해보려고 하는데요, 괜찮은 방식인지 의문이 들어 질문 남기게 되었습니다.자동 완성이 독이 된다던지 이런 조언이 있을까요?c++은 잘 안써봐서 백준에 바로 작성하면 문법 오류를 사전에 잡기가 너무 어려워서 질문 드립니다.ㅜㅜ
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
평균 구하기 (백준 1546) 질문
System.out.println(sum*100.0/max/N);강의에서는 이렇게 출력하는데 System.out.println(sum/max*100.0/N);이렇게 /max 와 *100.0 의 위치를 바꾸게 되면출력값이 다르게 나와요! 문제에서 점수/M*100그러니까 점수를 최댓값으로 나누고 100을 곱한다고 되어 있는데 순서에 따라 출력값이 다른 거면 다르게 풀어야되지 않을까요??
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
퀵정렬 설명시 오류
퀵 정렬을 설명할 때 start와 end가 만나면 swap이 아니라 start와 end값을 비교해서 적정 위치에 넣어주는것 아니었나요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
스택을 사용하기 했는데 효율성이 떨어지는 거 같아 리뷰 요청드립니다~
function solution(a){ let answer=0 let stack = [] let stick = [] let laser = [] // 막대 내 속한 레이저의 갯수 + 1이 최종 막대 갯수 // 막대 한 개 안에 속한 레이저가 총 몇개인지 구해서 카운트 더하기 for(let x=0; x<a.length; x++){ //막대 시작 if(a[x]==="(" && a[x+1] !==")"){ stack.push(x) } // 막대 끝 if(a[x]===")" && a[x-1] !=="("){ const pair = stack.pop() stick.push([pair,x]) } //레이저인데 막대 내부에 있는 레이저인 경우 if(a[x]=="(" && a[x+1]==")" && (a[x-1]=="(" || a[x+2]==")")){ laser.push(x) } } for (let i = 0; i < stick.length; i++) { const start = stick[i][0]; const end = stick[i][1]; let cnt = 0 for (let j = 0; j < laser.length; j++) { if (laser[j] > start && laser[j] < end) { cnt++ } } answer += cnt+1 } console.log(stick,laser) return answer } let a="()(((()())(())()))(())"; console.log(solution(a)); 이렇게 하다 보니 이중 for문을 사용해 복잡도가 n2이 되버려서 효과적이지 못한거같습니다.. 이런 접근 법은 별로일까요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 질문
안녕하세요 큰돌님.우선 덕분에 한문제씩 풀면서 많은 발전이 있는 것 같습니다.알고리즘 문제 풀면서 생긴 의문이 있는데요.1-J번의 경우에 저는 처음에 Combi를 사용하여 풀이를 하였는데 Combi를 사용할 경우 시간복잡도가 높아 시간초과가 나왔습니다.대략적으로 2의 30제곱(의상 수 조합) X 100(케이스)(테스트케이스 : 최대 100, 의상 수 : 최대 30) 시간초과 하지 않기 위해 다른 알고리즘을 써야한다는 이야기인데, 이때 시간복잡도가 어느정도까지 나오면 테스트 통과할 수 있는지 알 수 있을까요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이것도 맞는 알고리즘일까요?
제일 큰 수와 제일 작은 수를 더하는게 아닌 제일 큰 수와 m(limit)에 가장 가까운 수를 찾아 빼는 알고리즘입니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
LRU 코드 리뷰 부탁드립니다
function setQueue(queue, val) { if (queue.includes(val)) { queue = queue .slice(0, queue.indexOf(val)) .concat(queue.slice(queue.indexOf(val) + 1)); queue.unshift(val); } else { queue.pop(); queue.unshift(val); } return queue; } function solution(s, n, arr) { let queue = new Array(s).fill(0); for (const val of arr) { if (queue.length === s) { queue = setQueue(queue, val); } else { queue = setQueue(queue, val); } } return queue.join(" "); } hit, miss 인 경우의 로직을 setQueue로 함수화해서 처리를 해보았는데, 혹시 틀리거나 예외케이스에서 틀릴 경우가 생길까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 39p 질문드립니다!
선생님 안녕하세요! 다름아니라 교안을 통해 조금씩 배우는 중인데, 왜 저는 선생님과 같은 코드를 쳤는데도, 저런식으로 오류가 뜨면서 실행이 되지 않는걸까요?ㅜㅜ auto 타입도 아예 인식이 안되더라고요.C++14버전으로 컴파일하게 설정하는 부분도 맞게 했는데 왜그럴까요? 답변 기다리겠습니다. 감사합니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮을까요?
function solution(n, arr) { let new_arr = []; let new_new_arr = []; arr.map((item) => { new_arr.push([...item.toString()].reduce((sum, value) => (sum += 1 * value), 0)); }); let max_num = [...new_arr].sort((a, b) => a - b)[new_arr.length - 1]; for (let i = 0; i < arr.length; i++) { if (new_arr[i] === max_num) { new_new_arr.push(arr[i]); } } return new_new_arr.sort((a, b) => a - b)[new_new_arr.length - 1]; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
pow함수 int형으로 캐스팅
pow 가 double 형이라서 int 형으로 캐스팅을 하려 시도하였습니다. 근데 pow(5,4)를 그대로 프린트 찍을때는 625로 나오는데 int(pow(5,4))로 찍으면 624가 나오는 원인을 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-P 질문
안녕하세요 큰돌님!톱니바퀴문제를 풀고 예제는 전부 통과하는데다른 반례에서 막히고 있습니다.혹시 어떤 반례가 있을까요?? 톱니바퀴의 관계를 bool배열로 정의해서ture라면 톱니바퀴를 돌리는 방식을 사용하였습니다 코드에 주석처리 하였습니다!http://boj.kr/d8998b04abf748559932e676c3b4447e
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
트리순회 강의 코드 관련 질문드려요!
2주차개념 #12 트리순회(Tree traversal) 후위순회, 전위순회, 중위순회 안녕하세요! 위 강의에서 사용된 순회 코드에서 보통 다른 코드들 보면 자식노드가 1개인 경우 2개인 경우 이렇게 나누지 않고 아래처럼 짜여져 있는 코드가 많던대 저렇게 자식노드 수에 따라 나누신 이유가 있으실까요? void preorder(node<T>* run_point) { if (!run_point) return; cout << run_point->data << endl; preorder(run_point->left); preorder(run_point->right); }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다
const solution = (m, songs) => { let lt = Math.max(...songs), rt = songs.reduce((prev, cur) => prev + cur); let mid = parseInt((lt + rt) / 2); let nowCount; let minMinutes = Number.MAX_SAFE_INTEGER; const getCount = (minutes, songs) => { let count = 0; let remainMinutes = 0; for (let song of songs) { if (remainMinutes < song) { count++; remainMinutes = minutes - song; } else { remainMinutes -= song; } } return count; }; while (lt <= rt) { nowCount = getCount(mid, songs); console.log(mid, nowCount, minMinutes); if (nowCount > m) { lt = mid + 1; } else { rt = mid - 1; // if (nowCount === m) minMinutes = Math.min(minMinutes, mid); minMinutes = mid; } mid = parseInt((lt + rt) / 2); } return minMinutes; };먼저 getCount 부분을 다르게 작성해봤는데 반례가 있을지 궁금합니다.그리고 제 원래 코드는 while문 내에서 구한 nowCount값이 m과 같을 때만 minMinutes(정답)을 minMinutes와 mid 중 더 작은 값으로 대입해줬는데, nowCount가 m보다 작거나 같은 경우에 무조건 정답으로 대입해도 괜찮은 이유가 무엇인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-f 질문입니다!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요~!go 함수에서 아래 if 문을 통해서 antic이 무조건 배워진다고 하셨는데 그 구체적인 로직이 이해가 가지 않는데 추가 설명 부탁 드려도 될까요?if(index != 'a' - 'a' && index != 'n' - 'a' && index != 't' - 'a' && index != 'i' - 'a' && index != 'c' - 'a'){ ret = max(ret, go(index + 1, k, mask)); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 메모리 초과
안녕하세요 큰돌님.1-A문제를 makePermutation(재귀)을 통하여 작성해봤습니다.vector<int> v를 순서 섞기를 통하여 앞단의 7개 값의 합이 100인경우를 추려낸 다음, vector<int> ret에 memcpy를 통하여 복사를 진행하였습니다.결론적으로는 메모리 초과로 문제해결이 안되었는데, 합이 100인 1건의 사례에 대해서만 memcpy를 사용하였고, exit(0)를 통하여 프로그램을 종료하였는데 메모리 초과가 되는 이유를 모르겠습니다.한번 봐주시면 감사하겠습니다. <오답 - 메모리 초과>http://boj.kr/e8517aff3dde4152bf20a574308f7f76<정답 - 직접 작성>http://boj.kr/ce9f91b1272f4fe7beb54ddff446104c
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-M stack으로 구현시 반례
안녕하세요 큰돌님~!http://boj.kr/c7f8555cf2714400bcd11b71d55d803d4-M 문제 stack으로 구현 해 보려구 도전 하다가 49% 에서 틀렸다고 나와서해당 로직의 반례가 발생할 수 있는 부분이 어디인지 피드백 받고자 질문드립니다.제가 구현하고자 했던 규칙은 이렇습니다.p가 i를 만나면 pop;k가 a를 만나면 pop;c가 h를 만나면 c를 pop하고 h를 push;h가 u를 만나면 (h를) pop;짝짓기 문제 같아서 stack을 떠올렷는데, 해설코드는 queue더라구요? 연습겸 stack을 사용한 구현도 완성하고 싶습니다!답변 주시면 감사하겠습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
sum(rooms[i].length) 질문입니다.
n 은 방의 갯수 1000개rooms[i].length 은 한 방의 키의 개수 1000개이고sum(rooms[i].length) 는 모든 방의 키의 합이 아니라 한 방의 키의 합인거 아닌가요??...그래서 시간복잡도 O(V +E)에서V= 10^3, E= 10^6 이 되는 게 아닌지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
도저히 반례를 모르겠습니다..ㅜ.ㅜ
안녕하세요 선생님제가 2910 예제는 다 맞는데, 3%에서 틀렸다고 뜹니다ㅜㅜ혹시 이유를 알 수 있을까요?ㅠㅠㅠhttp://boj.kr/c1d9d1181254481589bb015bcf98568e감사합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-X
// 가장자리에 있는 hole을 통해 최소값을 잡는다. for(int i = 0; i <= n + 1; i++){ //가장 왼쪽, 오른쪽 확인 if(hole[i][0][1] != -1) enqueue(i, 1, hole[i][0][1]); if(hole[i][m + 1][3] != -1) enqueue(i, m, hole[i][m + 1][3]); } for(int i = 0; i <= m + 1; i++){ //가장 위쪽, 아래쪽 확인 if(hole[0][i][2] != -1) enqueue(1, i, hole[0][i][2]); if(hole[n + 1][i][0] != -1) enqueue(n, i, hole[n + 1][i][0]); }한 좌표를 기준으로 위쪽 0, 오른쪽 1, 아래쪽 2, 왼쪽 3으로 설정했는데가장자리 hole을 찾을 때는 가장 왼쪽의 경우위 코드처럼 if hole[i][0][3] != -1 으로 확인 해야 하는 것이 아닌가요..?왜 모두 반대 방향을 확인하는지 이해가 잘 되지 않습니다 .. ㅜ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
입력 값과 시간 복잡도 관해서 여쭙습니다!
다름이 아니라 이 입력값 N이 30인 경우,연산에 매우 오랜시간이 걸리더라구요!2중 반복문을 사용해서 구하는게 시간 복잡도상 이상적인 것인가요?아니면 DP를 사용하는 방법을 고려해야 되는건가여??