묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
시간복잡도 계산 시 1회 연산당 연산량은 왜 고려하지 않는 건가요?
물론 시간복잡도 측정 방식 중 대표적인 빅오 표기법 자체가 n이 점점 커져서 무한대로 커지는 걸 가정하니까 1회 연산량이 몇 배 차이 난다 해도 aN+b에서 a나 다름 없으므로 제거하는 것 같긴 합니다. 하지만 같은 O(n)이면 n이 절반만 줄어도 (n이 무한히 커진다고 가정할 때) 그 효과가 무시할 만한 수치가 아닐 것 같아서 여쭤 봅니다. (ChatGPT 답변은 뭔가 신통치 않고, 근거자료 달라고 해도 못 가져오길래 질문드립니다.)
-
해결됨코딩테스트 [ ALL IN ONE ]
LCA 관련해서 질문이 있습니다.
LCA 코드에서 left, right 변수는 방명록 (visited) 변수와 같이 방문한 값을 저장하기 위한 용도로 사용하는 것인 가요?!
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
total을 float으로 바꾸신 이유
안녕하세요 더치 페이 함수 만들기에서 going_dutch 함수 리턴값 계산하실 때 return float(total) / num_of_ppl 로 int 값인 total을 float으로 바꾸셨는데 굳이 float으로 바꾸신 이유가 궁금합니다 어차피 int끼리 나눗셈(/)을 하면 결과가 무조건 float으로 나오는데,굳이 total을 float으로 바꾸신 이유가 있을까요?바꾸지 않아도 결괏값은 float으로 나오지 싶어서요. 답변 기다리겠습니다. 감사합니다
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
터미널 설정
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.vs code에서 터미널 설정할 때 mac은 어떤 걸로 설정을 하며 되나요?
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
2:13분 관련 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 섹션1 시간복잡도강의 2:13초 쯤에 나오는코드에서 시간을 측정하는것이 아닌 성능에 많은 영행을 주는 부분을 찾아 실행시간을 예측하는 것이라 하셨는데 이 실행시간이라는 말이 실제시간을 말하는게아니라 입력크기에 따른 실행횟수를 말하는건가요??
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
8:47초경부터 9:00초까지 질문입니다.
같은 질문이 없는 것 같아서 올립니다. 아직 어떤 데이터도 추가하지 않았다면 newNode.next = this.head;에서 this.head는 null인데, 그럼 영상 우측 도식과 상관 없이 새 노드의 포인터가 아무것도 가리키지 않음헤드가 새 노드가 됨이렇게 되는 게 맞나요? 자료구조 공부가 처음이다 보니 그림 때문에 햇갈려서요...ㅎ
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
tail을 삭제하는 경우에 관련해서 질문이 있습니다.
안녕하세요 감자님. 큐 구현 강의 중 tail 부분을 삭제하는 코드에 관련해서 질문이 있어서 글을 남기게 되었습니다. else if (index == this.count - 1) { let deleteNode = this.tail; // 삭제할 노드 this.tail = this.tail.prev; // 기존 tail의 이전 노드를 새로운 tail로 설정 this.tail.next = null; // 새로운 tail의 다음 노드를 null로 설정 this.count--; // 노드 개수 감소 return deleteNode; // 삭제된 노드 반환 } else if (index == this.count - 1) { let deleteNode = this.tail; // 삭제할 노드 this.tail.prev.next = null; // 기존 tail의 이전 노드의 다음 노드를 null로 설정 this.tail = this.tail.prev; // 기존 tail의 이전 노드를 새로운 tail로 설정 this.count--; // 노드 개수 감소 return deleteNode; // 삭제된 노드 반환 }위의 코드가 제가 그림을 그려가면서 생각한 로직이고 아래의 코드가 감자님이 강의에서 올려주신 코드입니다.얼핏 생각하고 그림으로 대조해봤을 때 똑같은 기능을 하는 코드들인데 어떤 차이가 있는지 chatGPT한테 물어봤습니다.아래의 코드의 경우는 연결리스트에 노드가 1개 존재할 때 this.tail.prev가 null이기 때문에 error가 발생할 가능성이 있다고 했었습니다. 근데 강의에서 제공된 풀 코드를 보면 이미 연결리스트에 노드가 1개인 부분은 위의 if문에서 처리되기 때문에 문제가 없는 것 같습니다.둘 중에 어떤 코드를 쓰는 게 더 정확할지 여쭙고 싶어 질문 남깁니다. 감사합니다.
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
#1090번 문제 반례가 궁금합니다.
from copy import deepcopy def init_sort_checker(checkers): tmp_list = [] sorted_sum_list = [] for idx, chk in enumerate(checkers): for i, tgt in enumerate(checkers): if idx == i: #본인으로 가는 값은 제외 continue x_val = abs(chk[0] - tgt[0]) y_val = abs(chk[1] - tgt[1]) # price, [src, tgt] 순 정렬 tmp_list.append([x_val + y_val, [idx, i]]) tmp_list.sort(key=lambda x: x[0]) # price 값 적은 순서대로 정렬 sorted_sum_list.append(deepcopy(tmp_list)) tmp_list = [] return sorted_sum_list def sort_sum_target(sorted_sum_list, k): lowest_price = 1000000*k target_idx = -1 for idx, line in enumerate(sorted_sum_list): cnt = 0 line_price = 0 for price in line: if cnt >= k-1: break line_price = line_price + price[0] cnt += 1 if line_price < lowest_price: lowest_price = line_price target_idx = idx return target_idx def k_tgt_process(k, sorted_tgt, sorted_sum_list): tgt_line = sorted_sum_list[sorted_tgt] tgt_loc = [] for i in range(k-1): tgt_loc.append(tgt_line[i][1]) return tgt_loc def k_sorting_process(tgt_loc, checkers): tgt_list = [] for tgt in tgt_loc: tgt_list.append(tgt[0]) tgt_list.append(tgt[1]) tgt_list = list(set(tgt_list)) x_list = [] y_list = [] tgt_checkers = [] for tgt in tgt_list: x_list.append(checkers[tgt][0]) y_list.append(checkers[tgt][1]) tgt_checkers.append(checkers[tgt]) x_list.sort() y_list.sort() if len(x_list)%2 == 0: #짝수 x_chk_point = [int(len(x_list)/2-1),int(len(x_list)/2)] else: # 홀수 x_chk_point = [int(len(x_list)/2)] if len(y_list)%2 == 0: #짝수 y_chk_point = [int(len(y_list)/2-1),int(len(y_list)/2)] else: # 홀수 y_chk_point = [int(len(y_list)/2)] #모아볼 위치의 case 집합 chk_point_list = [] for x_chk in x_chk_point: for y_chk in y_chk_point: chk_point_list.append([x_chk,y_chk]) # 각 checker 위치에서 좌표로 이동하는데 드는 값 계산 ttl_price_list = [] for chk in chk_point_list: x_tgt = chk[0] y_tgt = chk[1] price_list = [] for checker in tgt_checkers: x = checker[0] y = checker[1] if x_list[x_tgt] > x: x_price = x_list[x_tgt] - x else: x_price = x - x_list[x_tgt] if y_list[y_tgt] > y: y_price = y_list[y_tgt] - y else: y_price = y - y_list[y_tgt] price = x_price + y_price price_list.append(price) price_list.sort() ttl_price_list.append(price_list) return ttl_price_list def TestCases(N): checkers = [list(map(int,input().split())) for _ in range(N)] sorted_sum_list = init_sort_checker(checkers) output_str = '0' for k in range(2, N+1): min_price = 2000000 sorted_tgt = sort_sum_target(sorted_sum_list, k) tgt_loc = k_tgt_process(k, sorted_tgt, sorted_sum_list) ttl_price_list = k_sorting_process(tgt_loc, checkers) for n_list in ttl_price_list: tmp = 0 for idx in range(k): tmp = tmp + n_list[idx] if tmp < min_price: min_price = tmp output_str = output_str + ' ' + str(min_price) tmp_str = list(map(int,output_str.split())) # print(output_str) print(*tmp_str) N = int(input()) TestCases(N) 다음과 같이 코드 작성해봤는데, sample input에 대한 답은 다 도출되지만문제 제출하면 답이 틀리다 나오네요..반례나 코드상의 오류를 도와주실 수 있을까요? [사용해본 input/output]4 1 1 2 1 4 1 13 1 0 1 3 14 4 13 13 16 14 15 18 15 30 0 4 8 24 5 3 2 6 9 3 16 14 6 17 14 0 10 17 31 47 5 3 2 6 9 6 13 13 6 17 14 0 4 14 24 40 4 15 14 15 16 14 15 16 15 0 2 3 4 2 4 7 4 7 0 0 4 1 101 2 101 200 101 201 101 0 1 199 398
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2 질문입니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2어떤 알고리즘을 학습하고 계신가요?여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요? W = "))()(" 케이스에 대해서, u와 v로 나누어야 하는데 u는 더이상 나눌 수 없는 균형잡힌 괄호 문자열이어야 된다고 했습니다, 하지만 해설로 제공해주신 풀이로 풀 때에는 W = "))()(" 가 애초에 균형잡힌 괄호 문자열이 아니기 때문에 u도 균형잡힌 괄호 문자열이 되지 않는다고 이해했습니다. (W의 문자열 길이가 홀수인 경우에는 )와 (가 모두 짝수 개수만큼 있을 수 없다고 생각했습니다.) 해당 문제의 원 링크에서 제공해주신 코드를 제출했을 땐 정답이 나오는데, 문제 설명 중에서 어떤 조건을 보고 W가 균형잡힌 문자열이 아닐 수도 있다는 것을 알수 있으며, u가 무조건 균형잡힌 문자열이 아니어도 된다는 것을 알 수 있는건가요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요? 제가 짠 코드와 제공해주신 해설 코드 중 차이점이 W를 u와 v로 나누는 부분에 있음을 알게되었고, 제 코드는 W가 무조건 균형잡힌 괄호 문자열인 경우에 대해서만 풀리게 되어있습니다. 에러가 발생했다면 어떤 에러인가요?from collections import deque def is_this_correct_parentheses(string): N = len(string) left_parentheses_num = 0 for s in string: if s == "(": left_parentheses_num += 1 if left_parentheses_num == N-left_parentheses_num: return 1 else: return 0 def is_this_balanced_parentheses(string): stack = [] stack.append(string[0]) string = string[1:] for s in string: tmp = s if len(stack) != 0 and stack[-1] == "(" and tmp == ")": stack.pop() else: stack.append(tmp) if len(stack) == 0: return 1 else: return 0 def u_string_processing(u): u = u[1:-1] tmp_u = "" for i in range(len(u)): if u[i] == "(": tmp_u += ")" else: tmp_u += "(" return tmp_u def get_correct_parentheses(balanced_parentheses_string): W = balanced_parentheses_string if W == "": return "" idx = 0 for i in range(1, len(W)): tmp_u = W[:i] if is_this_correct_parentheses(tmp_u) == 1: idx = i break if len(W) == 2: idx = 2 u = W[:idx] v = W[idx:] if is_this_balanced_parentheses(u) == 1: processed_v = get_correct_parentheses(v) return u+processed_v elif is_this_balanced_parentheses(u) == 0: tmp_string = "(" processed_v = get_correct_parentheses(v) tmp_string += (processed_v + ")") tmp_string += u_string_processing(u) return tmp_string return W 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결김영한의 실전 자바 - 중급 2편
hashCode() 오타? 질문
강의 자료 보면, 전부 다 해시코드 만들 때, Object.hashCode()를 사용한다고 되어있는데, 막상 equals()와 hashCode() 오버라이딩된 것을 보면, Objects인데, 둘은 서로 다른 것 아닌가요? 오타 아닌가요?
-
미해결김영한의 실전 자바 - 중급 2편
자료구조, 알고리즘
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]자료구조, 알고리즘이 재밌어야 할까요? 개발자가 되려면요
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
2:36초 head 위치가?
강사님 안녕하세요.이 이미지에서 큐에 관한 입력 순서인데차례대로 1,2,3,4 순서대로 넣으셧습니다.근데 스택이 아닌데 head의 위치가 왜 4로 가 있죠?큐는 FIFO니까 1에 head의 위치가 가야하는거 아닌가요??
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
강의 진행하면서 이해도 및 진행방향에 대한 질문입니다.
1. 현재 학습 진도1-6 시간복잡도 2. 어려움을 겪는 부분강의 유익하게 보고 있습니다! 이제 초반이긴한데 앞으로 진행방향을 어떻게 해야할지 의문이 생겨서요. 강의랑 중간중간 이해가 안 가는 부분들은 AI를 통해 한 줄 한 줄 이해를 하면서 진행을 하고 있는데 여기서 갑자기 드는 의문점 중에 하나가 코드에 대해 이해는 갔습니다. 하지만 저보고 적어보라고 하면 글쎄...? 하는 수준입니다. 그렇다고 하더라도 강의를 계속 이어나가봐도 되는 것일까요? 아니면 그 강의에 대한 내용을 제가 암기로라도 적을 수 있게 되어야 넘어가야 하는 게 맞을까요? 제가 어떤 자세로 선생님의 강의를 임해햐 할지 질문드립니다. 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
진짜 엄청나네요. 이 가격에 새로운 컨텐츠 추가라니
계속 반복 공부 하고 있는데 새로운 컨텐츠 추가라니, 이 가격에 이정도 퀄리티라니 놀라움의 연속입니다. 항상 좋은 자료 만들어 주셔서 감사합니다.
-
해결됨김영한의 실전 자바 - 중급 2편
HashSet과 HashMap 메소드의 시간 복잡도에 대해 여쭤봅니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.HashSet과 HashMap의 주요 메소드의 시간복잡도에 대해 정리한 내용인데, 제대로 이해했는지 올려봅니다. 1. HashMap은 hash table 역할을 하는 배열을 내부적으로 갖는데 기본 크기는 16이며, 저장되는 요소가 배열 크기의 75%를 초과하면 크기가 두배로 늘어나며 요소들은 re-hashing된다.2. 특정 인덱스에 저장되는 데이터가 8개 이상이 되면, 이 데이터들은 red-black tree 형태로 변환되어 add(), get(), remove()와 같은 메소드를 호출할 때 O(log N)의 접근 효율을 제공한다.3. 하지만 인덱스에 8개 이상이 아닌 2~7개의 데이터가 저장되는 경우 강의에서 설명한대로 데이터 접근에 대한 O(N)의 효율이 나온다. (해시 충돌 설명 인용)4. 그리고 HashSet은 HashMap을 기반으로 하기 때문에 위 1~3번 역시 HashSet에 동일하게 적용된다. (HashSet의 경우 각각 add(), contains(), remove()) 위 정리가 맞다고 가정해도, 특정 인덱스에 8개 이상의 요소가 저장되는 경우가 드물기 때문에 경우에 따른 시간 복잡도를 저렇게까지 깊게 구분할 필요가 없는걸까요..?
-
미해결김영한의 실전 자바 - 중급 2편
해시알고리즘 질문
데이터량보다 배열 크기가 크면 충돌이 잘 안 일어난다고 그랬는데, 에초에 일의자리가 같은 숫자를 넣는 경우가 많으면 배열의 크기가 데이터량보다 커진다 한들, 충돌이 자주 일어나는거 아닌가요? 몇 십만, 몇 백만, 천만건의 데이터가 들어올텐데, 그 중에서 일의자리가 같은 경우가 엄청 많을텐데, 충돌이 엄청 많이 일어나지 않나요??
-
미해결김영한의 실전 자바 - 중급 2편
링크드 리스트 제네릭도입 질문
링크드 리스트에서 마지막에 제네릭 도입한 코드에서, 정적 중첩 클래스의 생성자의 접근제어자를 public으로 한 이유가 있나요? private로 해도 되죠? 복붙한 코드여서 변경하시다가 놓치신건가요?
-
미해결김영한의 실전 자바 - 중급 2편
직접 구현하는 배열리스트3 - 기능추가 편 질문
ArrayList편직접 구현하는 배열리스트3 - 기능추가 편에서16:47초에 강의 자료보면, 순서대로 출력하는 경우에 가장 효율적이라 되어있는데, 무슨말이에요?
-
미해결김영한의 실전 자바 - 중급 2편
오타 문의드립니다.
안녕하세요?항상 재미있는 수업 감사드리며 수업을 너무 잘 듣고 있는 와중 오타로 의심되는 단어가 있어 문의를 드립니다섹션10 강의에 사용되는 PDF 파일인 9.컬렉션 프레임워크- Map 파일 5페이지 키와 값 목록 조회 부분에Entry 는 키-값의 쌍으로 이루어진 간단한 객체이다. Entiry 는 Map 내부에서 키와 값을 함께 묶어서 저장할 때 사용한다.에서 초록색으로 칠이 된 단어가 오타라고 생각 되어 문의 드립니다감사합니다.
-
미해결해외 빅테크 코딩 인터뷰: LeetCode 포기자의 합격 공부법
Mock Interview
마지막에 mock interview를 chatgpt를 가지고 하신것 같은데, 혹시 어떤 prompt를 사용하셨는지 공유해 주실 수 있나요?