묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결JavaScript 알고리즘 베스트 10
github 해당 레포는 priveate이라서 접근이 안됩니다.
7번 강의에서 github 레포에서 확인하라고 주소는 주셨지만정작 private이라서 접근이 불가능 하네요!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
뮤직 비디오에서 왜 45가 나오는지 모르겠습니다.
1~9까지 입력을 받았는데, 어째서 이것이 45가 최대가 되는건가요? 문제에서 한 곡당 용량이 최대 5라고 나와있는건가요? 어디 부분에 의해 45라는 rt 값이 나왔는지 알 수가 없어서 질문합니다..보니까 1~9까지 다 더하면 45가 나오는 것 같은데, 9번 노래의 용량은 9가 되는거고 8번 노래의 용량은 8이 되는건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이 문제 BFS 플루이드 워셜로 풀이하면 더 효율적일까요?
큰돌님 안녕하십니까?지난밤에 3-J 14497 주난의 난3-K 3197 백조의 호수해당 문제 DFS로 풀면 어떠나는 질문 남겨서 제 코드가 비효율적이라는 조언 감사히 받았습니다.https://www.inflearn.com/questions/1064823/%EC%9D%B4-%EB%AC%B8%EC%A0%9C-dfs-%ED%92%80%EC%9D%B4%EB%8A%94-%EC%96%B4%EB%96%A4%EA%B0%80%EC%9A%94 결론이 시간 복잡도를 고려하면 플루이드 워셜로 풀어야 효과적이라는 말씀같은데,해당 문제인 2-Q 치즈 문제도 BFS 플루이드 워셜로 풀면 좀더 효율적인 풀이가 될까요?2-Q는 DFS로 풀이해주셨는데, 플루이드 워셜 쓰면 더 효과적일지 아이디어 레밸에서 궁금해서 질문 올립니다.답변 미리 감사합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
지난 시간에 배운 indexOf를 사용하여 풀어보았습니다.
감사합니다// 내코드 function solution(length, ...rest) { let answer = []; for (const key in rest) { if (rest.indexOf(rest[key]) === Number(key)) answer.push(rest[key]); } return answer.join(","); } console.log(solution(5, "good", "time", "good", "time", "student"));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
label을 이용한 일곱난쟁이 반복문 탈출 공유드립니다.
function solution(arr) { // 7난쟁이가 아닌 9명이 있는상황 // 전체 난쟁이의 키는 100 const length = arr.length; const sum = arr.reduce((acc, value) => acc + value); const target = sum - 100; // 2중 반복분 종료 시 // 종료하고자하는 외부 for문에 label 지정 // break 뒤에 라벨명 명시 // >> 해당 스코프 종료 first: for (let i = 0; i < length - 1; i++) { const matchValue = target - arr[i]; for (let j = i + 1; j < length; j++) { if (matchValue === arr[j]) { arr.splice(j, 1); arr.splice(i, 1); break first; } } } return arr; } console.log(solution([20, 7, 23, 19, 10, 15, 25, 8, 13]));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S 1325 질문입니다.
안녕하세요. 제 나름대로 풀어봤는데 자꾸 시간초과가 걸려서 해설 코드 보고 제 코드를 조금 수정했거든요. 원래 제 코드에서 dfs알고리즘은 동일하고 해킹된 컴퓨터 수 계산해서 출력하는 것만 바꿨는데 맞네요. 그런데 제가 보기엔 별 차이 없을 것 같은데 어디서 차이가 발생하는지 궁금합니다. 원래 코드http://boj.kr/5ff0dc6ee81c41e5acf41f41a2b3e857 수정한 코드http://boj.kr/be9244a19d774c2ab6ce08343e52c94c
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-H 문제 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 큰돌 강사님 문제를 보면 "사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다."라는 조건이 있는데, 선생님이 제공해주신 풀이에서어떻게 순서가 같은지 체크가 되는건지 이해가 되지 않아서요.혹시 설명해주실 수 있나요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이 문제 DFS 풀이는 어떤가요?
큰돌님 안녕하십니까?해당 문제 2636 치즈 문제가 떠올라서 DFS로 풀이를 해서 통과했는데요, 해설에는 BFS 하셔서 질문 올립니다.해당 문제 DFS풀이는 어떻다고 생각하시나요?왜냐하면 이 다음 문제인 3-K 3197 백조의 호수는 이래 풀면 시간 초과 뜨더라구요! 제가 짠 코드는 2636 치즈 참고해서 아래와 같습니다.http://boj.kr/cc3ec76201724d44a5c35f955a9e41cc#include <bits/stdc++.h>using namespace std;////////////bfs dfs 용//////////char a[302][302];int visited[302][302];int m,n;int aa,bb;int c,d;string oneline;const int dy[] = {-1, 0, 1, 0};const int dx[] = {0, 1, 0, -1};vector<pair<int,int>> temp;int ret;bool dfs(int y, int x){bool tempbool=false;visited[y][x]=1;for(int i = 0; i< 4;i++){int ny = y + dy[i];int nx = x + dx[i];if( ny<0|| ny>=m || nx < 0 ||nx>=n) continue;if(visited[ny][nx]==1) continue; if(a[ny][nx]=='#'){return true;}if(a[ny][nx]== '1'){temp.push_back({ny,nx});continue;}else{tempbool = dfs(ny,nx);if(tempbool) return tempbool;}}return tempbool;}int main(){ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>m>>n;cin>>aa>>bb>>c>>d;for(int i = 0 ; i< m ; i++){cin>>oneline;for(int j=0; j<n;j++){a[i][j]= oneline[j];}} while(true){ret++;fill(&visited[0][0], &visited[0][0]+302*302,0);bool tempbool= dfs(aa-1,bb-1);if(tempbool) break; while(temp.size()){pair<int,int> aaa = temp[temp.size()-1];temp.pop_back();a[aaa.first][aaa.second] = '0' ;}} cout<<ret;return 0;}답변 미리 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[7-C] - 제작한 함수에서 값을 출력할 때 프로그래머스에서 어떻게 구현해야 하나요??
안녕하세요.요즘 프로그래머스에서 대부분 코딩 테스트를 제출하더라고요. 이 문제는 프로그래머스에서 어떻게 풀어야 하는지 모르겠어서 질문드립니다. int dfs(int y, int x){if (y < 0 || x < 0 || y >= n || x >= m || a[y][x] == -1)return 0;if (visited[y][x]){cout << -1 << "\n";exit(0);}int &ret = dp[y][x];if (ret)return ret;visited[y][x] = 1;for (int i = 0; i < 4; i++){int ny = y + dy[i] * a[y][x];int nx = x + dx[i] * a[y][x];ret = max(ret, dfs(ny, nx) + 1);}visited[y][x] = 0;return ret;} 이 풀이에서, visited[y][x]를 확인 한 후 답을 출력하는데,프로그래머스에서 exit(0)을 실행하면 program terminated unexpectedly 가 뜹니다. 어떻게 풀이해야 하나요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A TSP문제 재귀부분질문이있습니다
재귀부분에서 질문이 있습니다제가 이해하기론결국 for문에서 N번을 원래 브루트포스를 통해서 탐색하는 기본로직적인 측면은 같으나 반복문에 진입하기전에메모이제이션기법인 dp[MaxN][1<<MaxN]배열을 이용해for문을 돌지 않음으로써 최악의 시간복잡도인 N^N을 회피하면서 최적해를 찾는방식이되는걸까요? 제가이해한게맞을런지요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 반례 궁금합니다.
#include <bits/stdc++.h> using namespace std; int N; map<int, vector<int>> mp; int tmp, d, ret; void removeAll(int key){ // if not leaf node -> recursive remove if(!mp[key].empty()) { for(int c: mp[key]) removeAll(c); } // erase itself mp.erase(key); } int main(){ cin >> N; // make graph for(int i = 0; i < N; i++){ mp[i]; cin >> tmp; if (tmp != -1) mp[tmp].push_back(i); } // input node to be deleted cin >> d; removeAll(d); if (mp.size() == 1) ret = 1; else if (mp.size() == 0) ret = 0; else { // for all key in map for(auto it: mp) { int key = it.first; // if the remaining value empty => plus if (mp[key].empty()) ret++; } } cout << ret; }다음과 같이 map과 재귀를 풀어서 1068번 트리 문제를 풀었는데, 어디가 오답인지 감이 안옵니다.
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
스택과 불린을 이용해서 솔루션해봤는데 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.강의를 듣기 전 풀어봤는데, 설명해주신 방법도 숙지하겠습니다.function solution(s) { let answer = ''; let stack = []; let contain = false for (let ele of s) { if (ele === '(') { contain = true stack.push(ele) } if (!contain) { answer += ele } if (ele === ')') { stack.pop() if (stack.length === 0) contain = false } } return answer }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요. 강의를 보기전 제 스스로 풀어 보았는데, 어떤가요?
항상 감사합니다function solution(question) { let answer = ""; if (question.length > 100) return; const oddNumber = question.length % 2 === 1 ? true : false; const MiddleLength = Math.floor(question.length / 2); let count = 0; for (const z of question) { if (oddNumber) { if (MiddleLength === count) { answer += z; } } else { if (MiddleLength - 1 === count || MiddleLength === count) { answer += z; } } count++; } return answer; } console.log(solution("study")); //"u"
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 시작 기준 질문드립니다
안녕하세요 큰돌님큰돌님 로드맵영상 보고 참고해서 공부중입니다 ㅎㅎ제가 지금 c++개념강의만 한번 듣고 이제 큰돌님 코테강의 들으려고하는데프로그래머스 lv0같은 거 풀고나서 강의를 듣는게 나을까요?코테강의 공부를 시작하는게 나을까요??
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
문제 의문
선생님 BFS함수 코드 중에서 영희가 기사를 지나쳐가는 경우는 고려안했는데도 정답인 이유가 있나요?-> ['영희는 산딸기가 없이는 기사를 지나쳐 갈 수 없다.'] 2 - 0 - 3 - 4 이런 식의 행이 있으면 문제되지 않을까 싶어서요
-
해결됨코딩테스트 [ ALL IN ONE ]
제 경우에는 이렇게 코드를 짜봤는데 이것도 맞을까요?
class Solution(object): def lowestCommonAncestor(self, root, p, q): if root is None: # check whether Node is empty return if root is p or root is q: return root # root 노드가 p 또는 q가 아니면 순회하도록 재귀함수 호출 l = self.lowestCommonAncestor(root.left, p, q) # code 1 r = self.lowestCommonAncestor(root.right, p, q) # code 2 # p와 q 조건 검사를 마친 후(모든 노드를 순회하는 것은 아님) if l and r: return root elif l: return l else: return r먼저 LCA함수를 호출하면 root가 가리키는 노드가 있는지 체크한 다음에 계속해서 p 또는 q 노드가 맞는지 확인을 합니다. 만약 p 또는 q 노드가 아니면 재귀함수를 호출해서 자식 노드로 더 깊이 순회하도록 만듭니다. 역시 자식 노드들도 p 또는 q 노드가 맞는지 검사한 후 맞으면 l 또는 r에 그 노드를 저장합니다. 여기서 궁금한 점은, 자기 자신이 공통 조상이 될 때인데요. 이렇게 되면 더 깊이까지 탐색하지 않아도 elif l: return l 에 의해서 왼쪽만 탐색했으니까 시간복잡도가 O(logN)인가요? 아니면 다른 케이스들도 고려해서 최악의 경우 모든 노드를 탐색해야되니까 O(N)이 되는건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 재귀함수 범위관련 질문 있습니다
안녕허세요 강사님강사님 풀이 과정을 3번 이상 듣고 코드를 여러번 봤는데도 잘 이해가 안가는 부분이 있어서 질문드립니다! 강사님 코드기준(해설집) 11번째줄과 12번째줄에for(int i = y; i < y + size; i++){ for(int j = x; j < x + size; j++){이렇게 i 와 j 의 범위를 나누셨는데왜 y가 0 일때 모든 x 값 비교하고 재귀하고이런식으로 만든 이유가 궁금해서 질문합니다. 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 이렇게 한 묶음으로 검사를 하고 그 값을 return 하고 해야 맞지 않나요 ?제가 풀었던 범위 나누기와 달라서 너무 헷갈려서 질문합니다. #include <iostream> using namespace std; // 좌상 우상 좌하 우하 const int dy[4] = { -1, -1, 0, 0 }; const int dx[4] = { -1, 0, -1, 0 }; int N; char adj[65][65]; string ret; string QuardTree(int y, int x, int n) { string str; if (n == 1) return str += adj[y][x]; n = n >> 1; // n -> 2 for (int i = 0; i < 4; i++) { int ny = y + dy[i] * n; // 2 --> 1 int nx = x + dx[i] * n; str += QuardTree(ny, nx, n); } if (str == "0000") str = "0"; else if (str == "1111") str = "1"; else str = "(" + str + ")"; return str; } int main() { cin >> N; for (int y = 1; y <= N; y++) { string temp; cin >> temp; for (int x = 1; x <= temp.size(); x++) adj[y][x] = temp[x - 1]; } ret += QuardTree(N, N, N); cout << ret; return 0; } 혹시 질문이 이해가 안가실까봐 제 코드 풀이도 올려요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-D 영역 범위 관련 질문드립니다.
선생님께서는 입력 받은 값x1,x2y1,y2로 범위를 정하고 그에 해당하는곳에 1의 값을 넣어 주었는데그 값이 배열에서의 값과는 다른데--> 입력이 5 7 3 0 2 4 4 1 1 2 5 4 0 6 2다음과 같이 주어 졌을때(0,2) ~ (4,4) 부분에 해당하는 배열의 값들을 보면a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3]인데 왜 범위를 for(int x = x1; x < x2; x++){ for(int y = y1; y < y2; y++){ a[y][x] = 1; 다음과 같이 나누어 그 값을 바로 넣었는지 궁금합니다. 제 생각은 y좌표의 위치를 뒤집어서 생각하는 것이기에 모든 값들도 똑같이 뒤집어서 넣는거는 상관없어서 넣은것 같은데 맞을까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 모범답안 코드리뷰 부탁드립니다.
안녕하세요 큰돌님2-Q 2636문제 모범답안 코드 질문있습니다.void dfs함수에서 return이 두개가 있는데 각각 return을 하면 다시 main함수의 dfs(0,0)직후로 넘어가지는건가요 아니면 void dfs함수 내에 있는 if문의 return과 for문 바깥에 있는 return이 다른의미를 갖는건가요? void dfs함수 내의 return부분이 어디로 가는지 헷갈립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
DFS로 말단노드의 레벨값 구할때
이진트리 노드의 하위노드가 한개만 한개는 없을 경우 안된다고 말씀하셨는데 실제로 실습을 해보았을때도 안되더라구여 왜 안되는지 이유를 알고 싶습니다예를 들어If(root.lt==null && root.rt ==null) return L;else if(root.lt==null && root.rt != null) return DFS(L+1, root.lt);else if(root.lt !=null && root.rt == null) return DFS(L+1, root.rt);else return Math.min(DFS(L+1, root.lt), DFS(L+1, root.rt);이렇게 했을 경우 하위노드에 있는 하위노드 두개가 있는건 하위노드로 접근했을 때 값이 존재 했는데 하위노드가 한개 있을 경우 하위노드가 존재하는 노드를 dfs로 재귀했을경우 null값으로 되어서 이게 왜 이렇게 되는건지 알고 싶습니다.