묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
(백준 1260) 큐 사용에 대해서 질문드립니다!
선생님 덕분에 회차를 거듭할수록 재귀에 대한 이해도가 높아지고 있습니다 감사합니다!기존에 계속 독학으로 하다보니 제가 아는 내용과 조금 다른 부분이 있어 오늘만 벌써 두번째 질문이네요 ㅜㅜ기존에 큐를 구현할때 Queue<Integer> q = new LinkedList<>();혹은 PriorityQueue<Integer>pq = new PriorityQueue<>();로 구현해서 사용했었습니다!근데 혹시 ArrayList로 구현하시는 이유가 있을까요?? 하나 더 여쭤보자면...dfs는 재귀함수를 호출하는게 필수인데 비해bfs는 재귀호출이 없는데그럼 bfs는 재귀가 아닌 queue를 무조건적으로 사용한다고 생각하면 될까요? 매번 훌륭한 강의 감사드립니다!!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
(백준 24479) 강의에서 오름차순 정렬시 궁금한 점이 있습니다!
선생님 매번 감사합니다 유튜브부터 많이 도움을 받아 오늘 강의까지 결제하게 되었네요 :)for 문 안에 collections.sort를 사용하셔서 정렬하셨는데 저는 사실 그동안 Arrays.sort만 사용했었거든요프로그래머스에서 다른사람 풀이를 참고하다보면 Collections.sort 가 꽤 많이 나오더라구요합병정렬과 퀵정렬의 차이라는 이론적인 부분 외에 바꿔 사용해도 문제가 없는지, 효율적으로 다른부분이 있는지 궁금합니다! 추가적으로 궁금한게 하나 더 생겨서 수정합니다!문제에서 보면 노드의 방문순서를 출력하라고 했는데for(int i = 1; i <=N, i++) { bw.write(String.valueOf(answer[i]));로 출력해주셨습니다!리스트를 정렬해주었기에 크게 문제가 없는것인가 싶은데...조금 극단적으로 예시를answer[1] = 1answer[2] = 4answer[3] = 2answer[4] = 5answer[5] = 3이라고 했을때사용해주신 방식으로 출력하면 1,4,2,5,3 이 출력되나실제로 방문한 순서는 1,3,5,2,4로 상이하다는 생각이 들었습니다그래서 이중 for문을 사용하여for(int i = 1; i <=N; i++) { for (int j = 1; j <= N; j++) { if (i == answer[j]) 일때 j 의 값을 출력하는게순서를 출력하는게 아닌가.. 라는 의구심이 들었습니다혹시 제가 이해를 잘못하고 있는거라면 지적해주시면 감사히 듣겠습니다!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
가중치가 1 이상일 경우~
백준 - 깊이우선탐색 강의에서 "모든 간선의 가중치가 1"이라고 되어 있는데 이게 정확히 무슨 의미 일지요? 가중치가 1 이상이면 이 가중치 정보를 그래프에 담아야 할까요??(구조체 사용)
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
Bfs 강의 도입이 시급합니다!!
강의가 너무 좋네요~~ bfs 강의도 올려주실 계획 없나요~~~ (언어는 c++ 어떨지 조심스럽게 말씀드려봅니다 ㅎㅎ)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 1012 유기농 배추 문제
안녕하세요 큰돌님,제가 작성한 코드가 큰돌님의 예시 답안 코드와 로직이 거의 비슷하다고 느끼는데 제 코드는 백준에서 패스가 안되서 한번 의견을 구하고자 합니다.혹시 왜 accept이 안되는지 이유가 보이시면 답변 부탁드립니다~! #include<bits/stdc++.h> using namespace std; int tc, n, m, k, a, b, ny, nx, cnt; int cabbage[51][51], visited[51][51]; const int dy[4] = {-1, 0, 1, 0}; const int dx[4] = {0, 1, 0, -1}; void dfs(int y, int x){ visited[y][x] = 1; for(int i=0; i<4; i++){ ny = y + dy[i]; nx = x + dx[i]; if(ny < 0 || ny >= n || nx < 0 || nx >= m) continue; if(visited[ny][nx] == 1) continue; if(cabbage[ny][nx] == 0) continue; dfs(ny, nx); } return; } int main(){ cin.tie(NULL); cout.tie(NULL); //tc 개수 받기 cin >> tc; for(int e=0; e<tc; e++){ // n, m, k 받기 cin >> n >> m >> k; // 초기화 cnt = 0; fill(&cabbage[0][0], &cabbage[n-1][m], 0); fill(&visited[0][0], &visited[n-1][m], 0); // 배추의 위치 입력 for(int i =0; i<k; i++){ cin >> a >> b; cabbage[b][a] = 1; } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ if(cabbage[i][j] == 1 && visited[i][j]==0){ dfs(i,j); cnt++; } } } cout << cnt << "\n"; } return 0; }
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
바둑이 승차문제
안녕하세요! 바둑이 승차 문제 풀이 영상을 보고 다른 풀이로도 한번 풀어봤는데 예제 입출력대로는 제대로 나오는데 혹시 제 풀이가 맞는지 질문하고자 코드를 올립니다.C,N=map(int,input().split()) weights=[] result=[] for _ in range(N): weights.append(int(input())) def dfs(L,sum): if sum>C: return if L==N: result.append(sum) else: dfs(L+1,sum+weights[L]) dfs(L+1,sum) dfs(0,0) print(max(result))
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
미로탐색 dx dy 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.dx dy가 -1 0 1 0 정해졌는데 이 설명이 9시 3시 6시 그러시는데.... 이해가 잘 안됩니다dx dy기준 -1,0이 12시라고 그러시는데x좌표가 -1 y좌표가 0이면 9시 아닌가요??어떤 방향인지 이해가 안됩니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
DFS바둑이
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.바둑이 승차 문제 질문있습니다DFS함수 내 else구문에서DFS(L+1, sum, arr); 의 역할과 arr은 무엇인가요?sum에 arr[L] 바둑이 더하는거까지 이해했는데마지막 3번쨰 요소 arr이 뭔지 모르겠습니다
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
동전교환 응용문제 질문
선생님 섹션 8의 9번 동전교환 문제를 복습하면서 풀어보니 손에 익어서 이젠 풀 수 있게 되었습니다.여기서 문제를 변형시켜서 가장 적은 동전갯수를 반환하는게 아닌, 가장 작은 동전 갯수를 가진 동전 종류의 배열 (해당 문제의 경우 [5,5,5])를 반환하도록 문제를 풀고있는 중인데요.간단할 거 같았는데 의외로 잘 안풀리네요 ㅠㅠ 출력해보면서 이리저리 해보는데 접근 방법과 풀이를 알려주실 수 있을지 여쭙습니다.아래는 여태 작성한 제 코드입니다. let answer = Number.MAX_SAFE_INTEGER let len = arr.length let tmp = [] function DFS(L , sum){ if (sum > m) return if (L > answer) return if (sum === m) { answer = Math.min(answer, L) console.log(answer) console.log(tmp) tmp = [] } else { for (let i=0; i<len; i++){ DFS(L+1 , sum+arr[i]) if (!tmp.length || tmp.reduce((a,b)=>a+b) <= m) tmp.push(arr[i]) } } } DFS(0, 0) return answer } let arr=[1, 2, 5]; console.log(solution(15, arr));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문 있습니다
http://boj.kr/bed779eae6ad4685b7d84901805d18f8 선생님과 비슷한 맥락이지만void dfs로 작성했는데 반례가 있을까요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 방법의 DFS
다음과 같이 DFS 함수를 작성하는 것도 괜찮은 방법일까요? def DFS(L): global cnt if L == n_size: for x in result_list: print(x, end='') print() cnt += 1 return else: for i in range(L, n_size): if n[L] != '0' and 65 <= int(n[L: i+1]) + 64 <= 90: result_list.append(chr(int(n[L: i+1])+ 64)) DFS(i+1) result_list.pop()
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
dfs 공부관련 질문입니다.
강사님 파이썬을 처음 다루진 않지만 알고리즘 및 자료구조를 처음 공부하는 학생입니다. dfs 개념은 잡히는데 머릿속에서 문제를 읽고 dfs 개념의 핵심인 스택구조가 바로바로 떠올려지면서 코드를 구현하는게 너무 어렵습니다. 부분집합 구하기 문제또한 코드는 간단하나 이 코드가 진행되는 과정이 머릿속으로 바로 떠올려지지 않아 책에 적어보면서 공부를 하게 되네요. 어떻게 하면 머리속에 dfs개념을 바로 잡을 수 있을까요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS문제의 시간복잡도가 궁금합니다.
안녕하세요 선생님. 항상 질 좋은 강의 감사드립니다. 다름이 아니라 DFS문제를 이용한 문제들, 가령 바둑이 승차와 같은 문제는 시간복잡도가 어떻게 되는지 궁금합니다. 반복문으로 배열 전체를 탐색하는것이 아니므로 `O(N)` 이하가 나올것 같은데 맞는지 궁금합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요! 12번 경로탐색(DFS) 관해 질문 드립니다.
강의 너무나 잘 듣고 있습니다. 해당 강의에서, 정점을 가지고 for문을 돌 때 방문 체크를 해주었는데, 저처럼 DFS 함수 진입시 정점 방문을 해주는 코드는 맞지 않는 코드인가요?? 정답은 나옵니다 6! import java.util.Scanner; public class 경로탐색_인접행렬 { static int answer = 0, n,m; static int[][] graph; static boolean[] check; static void DFS(int v){ check[v] = true; if (v == n) answer++; for (int i = 1; i < graph[v].length; i++){ if(graph[v][i] == 1 && !check[i]){ DFS(i); check[i] = false; } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); check = new boolean[n + 1]; graph = new int[n + 1][n + 1]; for (int i = 0; i < m; i++){ int x = sc.nextInt(); int y = sc.nextInt(); graph[x][y] = 1; } DFS(1); System.out.println(answer); } }