묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
최종 진도
안녕하세요, 혹시 최종 진도가 [섹션 9. [심화] Backtracking]까지 일까요? 아니면 다른 부분도 추가로 업데이트가 될까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
정수론 강의 관련 질문입니다.
정수론의 22분 경의 문제가 이해가 안되어서 질문드립니다. 176~177 사이라는 조건에서는 176은 16으로 완전히 나누어떨어져서 16 + 소수(1) = 17은 이해했는데,22분~ 즈음에 4같은 경우에는 2가 두번이라 4라는 뜻이 이해가 안됩니다. 176과 같은 논리면 4는 2로 나누어떨어지니 2가 나와야 되는거 아닌가 생각이 들어 질문드립니다. 위의 연장선으로 27분 즈음에 2^0 은 1 이니 82로 나누어지는 숫자들의 수 만큼 + 1*(8/2)4로 나누어떨어지는 숫자들의 수 만큼 + 2*2여기까지는 이해8로 나누어떨어지는 숫자들의 수만큼은 + 4*1여기서는 4*1 이 아니라 3*1 이 아닌지1,2,4,8 이 약수가 되는데 1은 이미 처리 했으니 1은 제외해서 3 * 1 더해져야될 것 같은데 ㅠ 수학을 못해서 좀 어렵네요 답변주시면 감사하겠습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
섹션4 범위검색 강의 질문있어요.
올려주신 자료 04_RangeSearch02에서 void SearchByAge(void) 함수 마지막 부분 질문있습니다.SearchByAgeRange함수에서 동적할당한 주소를 리턴하고void **pResult로 받았습니다. void** pResult = SearchByAgeRange(min, max, &cnt);USERDATA* pTmp = NULL;for (int i = 0; i < cnt; ++i){ pTmp = (USERDATA*)pResult[i]; printf("%d, %s, %s\n", pTmp->age, pTmp->name, pTmp->phone);}free(pResult); <----요부분입니다.이제 해제를 해줘야 하는데요free(pResult)를 한 번에 해도 괜찮은건가요?아니면 for문 돌릴 때 free(pResult[i])로 해야하나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
bfs 코드를 공부하면서 트리에서의 levelorder 구현 방식에 대해 질문이 있습니다.
from collections import deque def levelorder(root): if root is None: return visited = [] q = deque() q.append(root) while q: cur_node = q.popleft() visited.append(cur_node.val) if cur_node.left: q.append(cur_node.left) if cur_node.right: q.append(cur_node.right) return visitedlevelorder 코드는 위와 같은데요. 여기서 q.append(root) 를 bfs 코드와 같이 사전에 queue = deque(root)로 미리 넣어줘도 되지 않나요? 이렇게하면 오히려 q.append(root)를 하는데 걸리는 런타임을 더 줄일 수 있을 것 같아서요
-
해결됨코딩테스트 [ ALL IN ONE ]
강의자료 부탁드립니다.
노션 이메일 : sooin03@naver.com좋은 강의 잘 듣겠습니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
완탐 1090
안녕하세요 자바로 강의 듣고 있는 학생입니다.강의를 들었을 때 이해한 바로는 x,y 따로 계산해서 더해 최솟값을 구한다.받은 좌표의 겹치는 부분 그러니까 예제로 보았을 때 x: 14~16 y:14~16의 로 모이는 모든 경우를 찾는다k번째에 k명이 모이는 최소 이동 횟수를 구하면 되니까 확인한 좌표에서 가까운 k개를 구하면 된다이렇게 이해하고 구현하면 될까요?그리고 하루정도 고민한다 해도 해결되지 않는다면 다른사람의 답, 풀이를 확인해봐도 될까요? 아니면 계속해서 시도하는게 좋을까요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
g_pHeadNode
g_pHeadNode는 왜 주솟값을null로 갖고있나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
levelorder 방식과 postorder 방식에서의 시간복잡도에 관해 질문이 있습니다.
강사님께서는 어짜피 둘다 모든 노드를 순회해야 하기 때문에 최악의 경우에도 시간복잡도가 O(N)이라고 하셨습니다. 그런데 아래와 같이 leetcode에 제출한 결과 런타임이 다르게 나와서 의문이 들었습니다.위가 postorder고, 아래가 levelorder인데 왜 levelorder가 더 빠른건가요?? 아니면 시간복잡도는 대략적으로 계산한 결과이기 때문에 실제 런타임을 돌린 결과에서는 상수값의 차이가 나서 저런 결과가 나온건가요??
-
해결됨코딩테스트 [ ALL IN ONE ]
two_sum 문제에서 원소 중복 여부 관련 질문
two_sum 문제에서 input으로 주어지는 nums에는 중복 원소가 없다고 가정하나요?문제에 '같은 원소를 두 번 사용할 수 없습니다.'라는 조건이 있는데, 예를 들어, nums = [4,1,9,7,8,2], target=14인 경우에는 False를 출력해야 하는 반면, nums = [4,1,9,7,7,2], target=14인 경우에는 True를 출력해야 하니까 원소 중복 가능 여부를 여쭤보게 되었습니다!
-
미해결JavaScript 알고리즘 베스트 10
github 해당 레포는 priveate이라서 접근이 안됩니다.
7번 강의에서 github 레포에서 확인하라고 주소는 주셨지만정작 private이라서 접근이 불가능 하네요!
-
해결됨코딩테스트 [ 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)이 되는건가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
강의 자료 요청 드려요.
노션 이메일 : realbig4199@gmail.com구글 폼도 작성했는데 조금이라도 빨리 받고 싶어서 글 남깁니다.좋은 강의 감사드려요!
-
해결됨코딩테스트 [ ALL IN ONE ]
강의 자료에 첨부된 사진 개인 블로그에 사용해도 되나요?
혹시 dp 설명중에 사용하신 사진과 설명을 gif로 해서 블로그에 적어놓으면 이해에 도움이 될거 같은데 사용해도 될까요? 출저는 밝히도록 하겠습니다.
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
병합정렬 tempArrIndex = leftIndex 질문 있습니다
안녕하세요,강의을 따라 코딩을 해보던 중 임시배열 tempArr을 작성하다가tempArrIndex = leftIndex 에서 leftIndex 대신 0을 넣었는데 그러면 코딩 실행이 정상적으로 되지 않아서 (강의 13:38 부분)무엇이 잘못됐는지 궁금해 질문 드립니다. 감사합니다 :)
-
해결됨코딩테스트 [ ALL IN ONE ]
while 반복문의 조건에 대해 질문있습니다.!
안녕하세요 선생님강의 잘듣고 있습니다.! while 반복문의 조건이l == r 일때까지 반복문을 실행하는건 이해했는데 왜 조건이 l < r 인지 잘이해가 안됩니다ㅠ 혹시 while 반복문의 조건을 l != r 이라고 해도 되는건가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
defaultdict() 함수의 선언부가 궁금해요
다익스트라 Network Delay Time 강의에가중치 그래프 구현을 위해 사용된 defalutdict() 함수의 내용이 없네요 어떻게 선언하셨는지 궁금합니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
컬렉션 프레임워크에서 get()
ArrayList<String> a = new ArrayList<>(); a.add("1"); a.add("2"); a.add("3"); int[] arr = {1, 2, 3}; arr[0] = 4; // 가능 a.get(0) = "one"; // 불가능위와 같이 배열도 ArrayList 객체도 모두 Reference type입니다. 배열에 대한 인덱스 접근은 r-value, l-value로 모두 기능할 수 있는데 ArrayList에 대한 get()은 r-value(값으로만 사용)로써만 기능하고 있습니다.get()의 반환형이 E로 제네릭(객체)인데 read only로 취급되는건가요...?get()으로 해당 위치를 참조하는게 아닌건가요?해당 메모리가 아닌 메모리의 값을 꺼내오는건가요? HashMap<String, String> h1 = new HashMap<>(); h1.put("1", "one"); h1.get("1") = "하나"; // 불가능다른 컬렉션 프레임워크지만 동일한 문제입니다.put(key, value)를 사용해 값을 저장하고 get(key)를 사용해 value를 가져올 때 get()으로 값을 바꿀 수는 없는 건가요? HashMap<String, ArrayList<String>> hashMap = new HashMap<>(); hashMap.get(date).add(Obj); // 가능이 경우에는 get()으로 참조한 메모리에 대해 다시 참조하여 메서드 사용이 가능했습니다. 이러한 동작이 get()으로 값을 반환하는 것이 아니라 객체 메모리에 접근한다고 생각했습니다. 위에 질문과 함께 조금 더 직관적인 질문 드립니다. public static void main(String[] args) { // Calendar calendar = new Calendar(); // calendar.run(); HashMap<String, String> h = new HashMap<>(); h.put("1", "before"); System.out.println(h.get("1").equals("1")); // 참조하여 메서드 동작 확인 h.get("1") = "after"; // 불가능 => 왜 안되는지? String str = "before"; System.out.println(str.equals("before")); // 참조하여 메서드 동작 확인 System.out.println(str); str = "after"; // 변경 가능 => 왜 되는지? System.out.println(str); }위 코드에서 각각 get()과 참조 변수 자체로 접근하였습니다.get()으로는 메서드까지는 접근이 가능하나 값 변경이 안되었고참조변수는 메서드 접근은 물론 값 변경(엄밀히 말하면 참조 변경)까지 되었습니다.이유가 궁금합니다. 감사합니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
Nested data structure를 Overview 할 수 있는 Module이 있나요?
많은 리스트와 딕셔너리들이 서로 nested되면 나중에 진짜 track하기 힘들지 않을까 하는 생각이 드는데요이런것들을 시각화하거나 관리하기 편하게 해주는 모듈이 있나요?현업에서는 어떤식으로 이런 구조를 사용하시는지 궁금해요~
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
선생님! 바이러스 문제 코드 질문있어요오
선생님 안녕하세요 유튜브에서 보고 오늘 처음 수강했는데 너무 귀에 잘 들어와서 재미있어요 bfs 강의도 올려주세용!다름이 아니고 바이러스 코드 중 이해가 안 되는 부분이 있어 질문 남깁니다!def dfs(idx): global visited, graph, answer visited[idx]= True answer += 1 for i in range(1, n+1): if not visited[i] and graph[idx][i]: dfs(i)바이러스 코드에서 idx가 3이 되고 answer가 3이 되는 부분 까지는 이해를 했는데 idx가 3일 때 for문을 돌면 2는 이미 방문했기 때문에 if문은 7까지 true가 되지 못하고 종료되는 것 아닌가요? 다시 idx=2로 돌아가서 5를 방문하게 되고 1에서 6을 방문하게 되는 부분은 코드 어느 부분에서 이루어지는 건지 잘 모르겠어요ㅜㅜ
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
병합정렬 질문 있습니다
강의 6:34까지 재귀함수로 배열의 반반을 원소 1개씩으로 분할하는 것 까지는 이해가 가는데, 왜 병합되어 정렬이 완료되는지는 이해가 안갑니다. ㅠㅠ function MergeSort(arr, leftIndex, rightIndex){ if(leftIndex < rightIndex){ let midIndex = parseInt((leftIndex + rightIndex) / 2); MergeSort(arr, leftIndex, midIndex); MergeSort(arr, midIndex + 1, rightIndex); } }까지는 분할만 이루어진 것 아닌가요?아니면 분할+병합이 이루어져있다고 가정하는 건가요? 감사합니다.