묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
사용하고 계신 폰트 이름 알 수 있을까요?
vs코드 상에서 제가 쓰고 있는 기본 폰트는 l하고 1 이 헷갈리게 입력되어서 폰트를 바꾸고자 합니다혹시 강사님께서 사용하고 계신 폰트 이름을 알 수 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
파이썬에서의 재귀
글에 두서가 없어도 양해 바랍니다 이 수업 수강 이전에 코딩 문제를 풀 때 파이썬으로 재귀함수를 사용했던 적이 있습니다. 그때 알게 된것이 파이썬의 재귀함수에는 기본적으로 깊이의 제한이 있다는 것입니다. sys.recursionlimit()으로 확인해보니 재귀호출을 1000이상 못하도록 값이 제한되어 있고 이 값을 늘려서 사용하는것은 별로 추천되는 방법이 아닌걸로 알고 있습니다. C언어 사용할때에는 속도면에서 제한도 없고 파이썬보다 속도도 월등하다보니 재귀를 자주 사용했었는데 파이썬에서 재귀함수로 풀어야 하는 경우가 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
연결리스트 -1 번 강의에서 질문입니다!
class LinkedList(object):선언한 뒤에linkedlist = LinkedList()이렇게 선언을 하는데 object 는 안써도 되는건가요? ㅠㅠ
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유 요청했는데 확인부탁드립니다.
hth815@g.kmou.ac.kr 으로 네이버폼에 작성했는데 아직 공유가 안된 것 같아서 확인부탁드립니다..!
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
A* 알고리즘에 대해 질문있습니다!
이 강의를 보고, 직접 게임에 적용해보고 싶어서 다시 강의를 수강하며 공부 중인 학생입니다.맵을 만들다보면, 강의처럼 한개의 plane이 아닌 여러개의 plane 또는 오브젝트들이 바닥에 놓여질 텐데 grid를 어떻게 나눠야하는지에 대한 질문입니다!처음에는 2차원 배열로 두고, 그리드를 xOffset,yOffest에 의해 row와 col을 증가시키는 방식을 사용했습니다. 하지만, 코드를 수정하고 생각하는 과정에서 머리가 꼬여버렸습니다ㅜㅜ..두번째로는 하나의 큰 plane을 아래에 두고, 다양한 사이즈와 모양의 plane을 두는 방식을 생각하는 중입니다. 제 주변에 게임 개발자가 없어 이렇게 질문 글을 올립니다. 혹시, 실제 게임 개발시에 a* 알고리즘을 사용한다면 어떤 방식으로 그리드를 나누는지 알 수 있을까요? 알려주신다면 정말 감사합니다!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 실행시 틀립니다.
안녕하세요 강사님. 문제를 풀고 백준에 제출했을 때 계속 오답으로 나와 질문 드립니다..제가 봤을 때 강사님 코드랑 거의 비슷하게 수정까지 한 것 같은데.. 어떤 부분이 잘못되었는지 확인 한번 부탁드립니다.import java.io.*; import java.util.StringTokenizer; public class Main { final static int MAX = 50 + 10; static boolean map[][]; static boolean visited[][]; /* static int dirY[] = {1, 1, 1, 0, 0, -1, -1, -1}; static int dirX[] = {-1, 0, 1, -1, 1, -1, 0, 1};*/ static int dirY[] = {-1, -1, 0, 1, 1, -1, 0, -1}; static int dirX[] = {0, 1, 1, -1, 0, -1, -1, -1}; static int N, M; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); while (true) { StringTokenizer st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); // 너비 x N = Integer.parseInt(st.nextToken()); // 높이 y if (N == 0 && M == 0) break; map = new boolean[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map 정보 반영 for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine()); for (int j = 1; j <= M; j++) { map[j][i] = Integer.parseInt(st.nextToken()) == 1; } } // 2. dfs int result = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (map[i][j] && !visited[i][j]) { dfs(i, j); result++; } } } // 3. 출력 bw.write(String.valueOf(result)); bw.newLine(); } bw.close(); bw.close(); } private static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 8; i++) { int newY = dirY[i] + y; int newX = dirX[i] + x; if (map[newY][newX] && !visited[newY][newX]) { dfs(newY, newX); } } } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 14분쯤 문제 2번 14232번 출력초과...
자꾸 출력초과가 나요..vscode에서 돌려보면 맞는 출력값이 나오는데왜 백준에서는 출력초과가 나는지 모르겠어요 ...강의에 있는 코드 참고해서 한건데 왜 안되는지 모르겠어요 ㅠ........ n = int(input()) jewel = [] for i in range(1,int(n**0.5)+1): if i >2 : if n%i == 0: jewel.append(i) jewel.append(n//i) jewel.sort() print(len(jewel)) print(' '.join(map(str,jewel)))
-
미해결Do it! 알고리즘 코딩테스트 with C++
백주 1456번
for (int i = 2; i <= 10000000; i++) { if (num[i] != 0) { long long temp = num[i]; while ((double)num[i] <= (double)B/(double)temp && (double)num[i] >= (double)A / (double)temp) { count++; temp = temp * num[i]; } } }풀이와 다르게 while 문에서 min값까지 판단하게되면 왜 답이 달라지는건지 모르겠습니다.어떤 값을 count 못하게 되는건지 모르겠습니다
-
해결됨Do it! 알고리즘 코딩테스트 with C++
백준 1325, 교재 47번 문제 질문입니다.
교재에서는 bfs로 구현했는데 저는 dfs로 구현해봤습니다.그랬더니 시간초과가 발생했네요. 제가 작성한 코드가 올바른답이긴하지만 시간초과가 발생하는건지, 아니면 그냥 틀린건지 궁금합니다. 또한 올바른답 이맞다면 왜 시간초과가 발생하는지(시간복잡도 차이가 왜 크게 나는지)도 궁금합니다. #include <iostream>#include <vector>#include <queue>using namespace std;int maxdepth=-1;vector<vector<int>> a;vector<bool> visited;void dfs(int k, int depth);int main() {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);int n,m;cin >> n >> m;a.resize(n + 1);visited = vector<bool>(n + 1, false);for (int i = 0; i < m; i++) {int s,e;cin >> s >> e;a[e].push_back(s);}vector<int> result(n + 1, 0);for (int i = 1; i <= n; i++) {dfs(i, 0);result[i] = maxdepth;maxdepth = -1;fill(visited.begin(), visited.end(), false);}int realmax = -1;for (int i = 1; i <= n; i++) {if (result[i] > realmax)realmax = result[i];}for (int i = 1; i <= n; i++) {if (realmax==result[i])cout<<i<<' ';}}void dfs(int k, int depth) {if (maxdepth < depth)maxdepth = depth;visited[k] = true;for (int i : a[k]) {if (!visited[i]) {dfs(i, depth + 1);}}visited[k] = false;}
-
해결됨코딩테스트 [ ALL IN ONE ]
LCA 문제 관련해서 질문이 있습니당
꼭 visited 배열에 값을 넣거나 혹은 값을 print 하는 것이 아니고 이번 LCA 문제처럼 값을 return 해주는 것도 트리를 순회하다가 방문 처리를 했다고 이해해도 될까요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
배열 출력
만약 int []A = { 1, 3, 9, 4 } 가 있을때,A={ 1, 3, 9 ,4 } 를 출력하고 싶으면 어떻게 해야 출력할 수 있나요? 혹은 for 중첩문의 반복 조건을 통해 선택정렬을 해서( 1, 9) 와 ( 3, 4 ) 에 해당하는 것만 출력하고 싶을때는 어떻게 해야 출력할 수 있나요? 그리고 그건 어디에서 배울 수 있나요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
질문
수업들어보니 자바스크립트의 let 이 자바의 int 같은데, 만약 int min = i ; 선언하고 아래 if ( arr[j] < arr[min]) {min = j ;}라고 하셨는데, 그러면 변수 min 에는 j 값이 저장 되기는 하지만 int 는 지역 변수라 if 문 안에서 저장된 int min 의 값이 if 문 밖으로 나가서는 for 문을 실행하여 다시 j 가 하나 더해져서 반복 실행 되었을때 min 의 값은 다시 i 로 초기화 되는건가요? 아니면 j 로 바뀐건가요 ? -제가 아는 지역 변수에 대한 설명입니다 지역 변수는 선언된 함수나 메소드 내에서만 접근이 가능하고, 해당 함수나 메소드의 실행이 끝나면 그 범위를 벗어나서 접근할 수 없습니다.
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
질문
안녕하세요. 덕분에 삽입정렬 마스터했습니다. 또한 다른 쪽 우선 공부해보고 싶은 곳이 있는데, 만약 A=(1, 11, -2, 12, 8, 9)이고 x=10이라면, 알고리즘은 (1, 9) 또는 (-2, 12) 같은 쌍을 찾아내야 할때를 공부하고 싶은데, 어떤 부분을 공부하면 될까요? 기본인지 심화에 있는지도 말씀해주시면 감사드리겠습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
postorder 문제 문의드립니다!
안녕하세요!현재 postorder 트리 문제 풀었는데요!선생님이 공유해주신 코드가class Solution(object): def lowestCommonAncestor(self, root, p, q): if root == None: return None left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if root == p or root == q: return root elif left and right: return root return left or right이렇게 인데 class에 대해서 잘 몰라서 그런지 이후로 어떻게 해야 답이 나오는지 모르겠습니다ㅜㅜresult = Solution([3, 5, 1, 6, 2, 0, 8, None, None, 7, 4], 6, 4)이렇게 했는데 에러가 나는데 어떻게 해야할까요?++ 선생님 파이썬 전자책으로 공부하고 했는데, 제가 잘 못찾아서 그런지 그때 클래스에 대해서 보지 못한것 같은데 설명해주셨으면 좋겠어요🙏🙏
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
질문
혹시 이 강의에서 binary search 에 대해서도 가르쳐주시나요 ?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
자바
안녕하세요. 저는 지금 자바로 공부하고 있는 학생인데, 이 강의는 자바스크립트를 기준으로 공부가 진행되더라구요. 자바를 공부하는 사람이 이 강의를 봐도 괜찮나요?아니면 실현하는 코드가 완전히 다른가요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
연결리스트 삭제 시 헤드노드 NULL인 경우 예외처리의 필요성 재고
연결리스트 삭제 시 헤드노드가 NULL인 경우를 고려해야 하는 이유가 궁금합니다. 삭제 전에 삭제할 노드를 미리 찾는 과정이 수반되는데, 그 과정은 헤드노드가 NULL값이 아니라는 것을 전제로 이루어집니다. 따라서 삭제할 노드를 찾아서 삭제를 진행하는 단계까지 왔다는 것은 헤드노드가 NULL이 아니라는 것을 전제로 한다고 볼 수 있습니다. 그럼에도 불구하고 삭제를 진행하는 함수에서 헤드노드가 NULL인 경우를 고려하시고 이에 대한 예외처리 코드를 작성하셨는데, 혹시 그에 대한 이유가 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
수강생인데 교재 공유좀 해주세요.
안녕하세요. 저번에 교제 공유 신청했는데 2일째 답변이 없으셔서 빨리 신청한 이메일로 공유좀 부탁드려요
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
움직이는 물체에 대한 쿼드, KD트리 효율 질문
강의 잘들었습니다 😊😊 강의를 들으면서 한가지 의문이 생겼는데요 쿼드트리나 KD트리를 이용하면 다수의 물체에 대한충돌체크에 쓰이면 좋을거 같다는 생각을 했습니다. 강의에서는 고정된 물체에 대해서 트리를 구축하고 질의(Query)를 실행하는데요 만약 물체가 움직이게 된다면 위치값이 계속바뀌닌까 이 알고리즘을 사용할수 없을수도 있을거 같았습니다. 움직일때마다 트리를 재구축 해줘야하닌까 더 비효율적이지 않을까요?? 움직이는 다수의 물체에 대해 충돌체크를 하려면쿼드트리를 사용하고 물체가 이동할때마다트리 노드가 들고있는 물체 목록을 옮겨 다니는 로직을 만들어야 할까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
템플릿 코드에서 if cur_v not in costs: 부분에 의문이 있습니다.
def dijkstra(graph, start, final): # 각 노드들의 비용을 저장 costs = {} # 우선순위 큐 pq = [] # (해당위치까지 가는 총 비용, 노드위치) heapq.heappush(pq, (0, start)) while pq: # heappop을 하면 가장 작은 원소가 튀어 나온다. cur_cost, cur_v = heapq.heappop(pq) # 방문하지 않은 백터 일때만 작동 if cur_v not in costs: # costs[cur_v] = cur_cost for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost heapq.heappush(pq, (next_cost, next_v)) return costs[final]해당 템플릿 코드중에서 if cur_v not in costs: costs[cur_v] = cur_cost어떻게 costs에 cur_v가 없다는 것 만으로 바로 최적의 경로라고 확신할 수 있는지 의문이 있습니다. heapq의 성질덕에 cur_cost, cur_v가 '지금까지 heap에 넣은 값들중에' 가장 작은 값 인거는 알겠는데 다른 경로를 통해 뒤늦게 heap에 들어간 값이 이전에 costs에 not in이여서 넣은 값보다 작은 경우도 있지 않나요??뭔가 제 생각에 자연스럽지 않아서 다른 코드들을 찾아보니 아래와 같이 제가 생각한 조건대로 대소 비교를 해보고 넣더군요.def dijkstra(graph,start,end): costs = {vertex:111111 for vertex in graph} pq = [] heapq.heappush(pq,(0,start)) while pq: cur_cost, cur_v = heapq.heappop(pq) if costs[cur_v] < cur_cost: continue for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost if next_cost < costs[next_v]: costs[next_v] = next_cost heapq.heappush(pq, (next_cost, next_v)) return costs[end] " '지금까지 heap에 넣은 값들중에' 가장 작은 값 " 이 아니라 앞으로 나올 값 중에 가장 작은 근거가 있을까요??- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.