1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-11 def find_count_to_turn_out_to_all_zero_or_all_one(string): # string을 순회하면서 0과 1의 연속된 덩어리 개수를 구함 # 그 개수중 min을 return zero_seq = 0 one_seq = 0 prev_num = string[0] # 첫 bit 초기화 if string[0] == "0": zero_seq += 1 else: one_seq += 1 # 2번째 bit부터 마지막까지 순회 for bit in string[1:]: if bit != prev_num: if bit == "0": zero_seq += 1 else: one_seq += 1 prev_num = bit min_count = min(zero_seq, one_seq) return min_count result = find_count_to_turn_out_to_all_zero_or_all_one(input) print(result) 안녕하세요! 1주차 숙제 중 문자열 뒤집기 문제를 풀면서 궁금한 점이 있어 질문 남깁니다. 저는 풀이가 위 코드와 같이 나왔는데, 정답 코드랑 비교했을때 살짝 다르더라구요. 출력은 잘 나오는 것 같은데, 정확한 차이가 궁금합니다. 저는 현재 bit를 이전 bit와 비교하고, 강사님은 현재 bit를 다음 bit와 비교하는 방식의 차이일까요? 아니면 제 풀이에 문제가 있을까요?
다음 영상에서 문제 풀거라고 하셨는데 문제풀이 영상이 누락되어있는 것 같습니다 최소공통조상 빠르게 구하기 마지막부분이나 여러 영상들에서 다음영상에서 문제 풀어볼거라고하셨는데 문제풀이 영상이 빠져있는 것 같아요 ㅠ ! 유튜브에 들어가봐도 자바 문제풀이 영상을 찾을 수 없었습니다ㅜ 확인해주실 수 있나요?
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-10 2. 어려움을 겪는 부분 def find_not_repeating_first_character(string): alphabet_occurrence_array = [0] * 26 for char in string: if not char.isalpha(): continue arr_index = ord(char) - ord("a") alphabet_occurrence_array[arr_index] += 1 not_repeating_character_array = [] for index in range(len(alphabet_occurrence_array)): alphabet_occurrence = alphabet_occurrence_array[index] if alphabet_occurrence == 1: not_repeating_character_array.append(chr(index + ord("a"))) for char in string: if char in not_repeating_character_array: return char return "_" 아래 부분에서 시간복잡도가 O(N²) 인 것 같은데 왜 O(N)인지 궁금합니다. for 문은 O(N) 인 건 알겠습니다! if문에서 char가 not_repeating_character_array 리스트에 포함되어있는지 최악의 경우에 리스트 크기 만큼 돌아야하니까 O(N)라고 생각해서 총 시간복잡도는 O(N) * O(N) = O(N²) 로 계산했습니다... for char in string: if char in not_repeating_character_array: return char
안녕하세요, 선생님. 항상 좋은 강의 감사드립니다. 저는 비전공자로 개발자를 준비하고 있는데, 최근 CS 과목을 처음 공부하게 되었습니다. 개념 강의는 어느 정도 이해가 가지만, 구현 강의에서 실제로 코드를 짜는 부분은 많이 어렵게 느껴집니다. 자바스크립트의 기본적인 문법은 알고 있음에도 구현 강의에서는 따라가기가 쉽지 않더라고요. 그래서 현재는 개념 강의를 먼저 모두 수강한 후, 구현 강의를 반복해서 보며 익히는 방식으로 공부하려고 하는데, 이런 방식이 괜찮은 공부 방법인지 궁금합니다. 혹시 더 효과적인 방법이 있다면 조언 부탁드립니다. 감사합니다!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-5 어떤 알고리즘을 학습하고 계신가요? 알고리즘과 친해지기(2) 여기까지 이해하신 내용은 무엇인가요? max값을 구할 때 리스트의 max 함수를 사용할 수도 있는데 굳이 max 값을 따로 구하는 이유가 있으신가요? 그게 더 시간 복잡도상으로 좋아서인지 초심자 입장에서 생각해보려고 하는 건지 궁금합니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] "java" 해시코드가 강의에는 3254849 로 나와있는데 제가 출력했을때는 3254818 이 나옵니다. 나머지 값들도 다 다른데 같은 Object에서 해시코드메서드를 출력해서 값을 구한건데 다르게 나올수 없지 않나요?
# 단어 입력 / 목록 리스트 출력 # 목록 리스트 입력 / 중복 검사 리스트에 이미 있는 요소인지 확인 후 각 요소를 다른 문자가 나오기전까지 중복 검사 리스트에 저장 # 중복 검사 리스트가 온전히 만들어진걸 카운팅 +1 입력 / 카운팅 출력 import sys input = sys.stdin.readline t = int(input()) cnt = 0 words = [] for _ in range(t): words.append(input()) for word in words: used_li = [] cur_word = '' flag = 1 for c in word: if cur_word != c and c not in used_li: cur_word = c used_li.append(c) continue if cur_word == c: continue if cur_word != c and c in used_li: flag = 0 break if flag == 1: cnt += 1 print(cnt) 헤이밥 강의를 보고 평소 풀던 방법이 아닌 모듈화로 쪼개서 풀어보려 하는데 괜찮은지.. 그리고 조건문을 좀 복잡하게 달아서 푼 것같은데 방법론적으로 좋은 접근인지도 조언을 구하고 싶습니다.
안녕하세요 딩코님! 현재 4주차 숙제부분까지 강의를 완료하고 5주차는 실전문제풀이과정이라 해당 과정 들어가기전에 질문이 있습니다. 4주차 까지 들으면서 이전까지는 숙제문제는 바로 코드로 작성하진 못해도 어 이렇게 풀면 되지않을까 하는 구상이 가능했는데 3주차 숙제인 멜론 베스트 앨범뽑기부터 해서 4주차 숙제들은 전부다 문제를 봐도 해당 주차에 배웠던 알고리즘들을 이용해서 풀어보려해도 시작점 조차 생각이 나질않아 바로 해설영상을 보고 따라치는 정도로밖에 하질못해 다시 반복해서 공부할 예정입니다. 5주차 영상부터는 4주차까지의 숙제로 주신 알고리즘 문제를 전부 이해하고 시청하는게 좋을까요 아니면 일단 문제들을 최대한 풀어서 익숙해질떄까지 계속 풀면서 이해하는게 좋을지 궁금합니다. 또 알고리즘 문제를 풀면서 정답이나 해설영상을 몇분까지 풀다가 보면 좋을까요 지금까지는 문제를 풀다가 '아 나 더이상 이 이상은 작성 못하겠어' 할떄 정답과 해설영상을 봐왔는데 이렇게 하니 어려운 문제를 풀때는 시간이 너무 소모되는거 같아 이게 맞나? 싶을떄도 있어 제가 잘못 공부하고있는건지도 궁금합니다!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-11 어떤 알고리즘을 학습하고 계신가요? 소수 나열하기 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 소수 나열하기 2차 개선 조건식 위치 input = 20 def find_prime_list_under_number(number): prime_list = [] for n in range(2, number + 1): for i in prime_list: if n % i == 0 and i * i <= n: break else: prime_list.append(n) return prime_list result = find_prime_list_under_number(input) print(result) 코드의 어떤 로직이 이해가 안 되시나요? if n % i == 0 and i * i <= n: # 강의 노트 if i * i <= n and n % i == 0: # 수업 어떤 개념이 헷갈리시나요? 강의 노트와 수업에서의 개선된 로직이 어떤 연산을 줄여서 시간복잡도가 개선되는 건가요? i가 n의 제곱근보다 클 경우 나머지 연산을 수행할 필요가 없어 불필요한 나머지 연산을 수행하지 않기 위해 제곱근에 대한 조건식을 먼저 검사하지 않아도 되는건가요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 input = 20 def find_prime_list_under_number(number): prime_list = [] for n in range(2, number + 1): is_prime = True for i in prime_list: if i * i > n: break if n % i == 0: is_prime = False break if is_prime: prime_list.append(n) return prime_list result = find_prime_list_under_number(input) print(result)
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 2-10 챕터 어떤 알고리즘을 학습하고 계신가요? 더하거나 빼거나 문제 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 재귀함수 코드의 어떤 로직이 이해가 안 되시나요? get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum + array[current_index]) get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum - array[current_index] 제가 이해 안가는것은 처음에 cur_index = 0 , cur_sum = 0 부터 시작하잖아요 get_all_ways_by_doing_plus_or_minus(array,1,2) get_all_ways_by_doing_plus_or_minus(array,1,-2) 그러고 다음 cur_index = 1 , cur_sum = 2 이렇게 흘러가는데, 왜 get_all_ways_by_doing_plus_or_minus(array,1,-2) -2 가 안가고 +2 가 가는지 궁금합니다. get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum + array[current_index]) 계산이 전부 끝난 뒤에 get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum - array[current_index] 가 이어서 오는건가요 ? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-2 트리1 어떤 알고리즘을 학습하고 계신가요? 트리 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 이진 트리 vs 완전 이진 트리를 비교하는 마지막 영상에서 완전 이진 트리의 그림을 보면 최하단 오른쪽에 노드가 하나 있는데, 완전 이진 트리는 왼쪽부터 채워져야 하는 거 아닌가요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
안녕하세요. 감자님. 동적 프로그래밍 관련하여 질문이 있어 글을 남기게 되었습니다. 메모이제이션의 경우 함수의 콜스택뿐 아니라 메모를 위한 추가 메모리 공간이 더 필요하고 타뷸레이션의 경우 값을 저장할 테이블을 위한 메모리 공간만 필요한 걸로 알고 있습니다. 콜스택과 메모 공간 모두 필요로 하는 메모이제이션보다 테이블 공간만 필요로 하는 타뷸레이션이 좀 더 이점이 있을 것이라고 생각합니다. 하지만 메모이제이션의 경우 그러한 단점들을 가지고 있더라도 재귀적으로 어려운 문제를 쉽게 해결할 수 있다는 큰 장점이 있기 때문에 2개의 기법 간에 우열이 있는 것이 아니라 문제 해결에 가장 적합한 방법을 사용하는것이 효율적인가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 4:47초에서 iterator.next()가 '현재 데이터를 반환하고 다음으로 이동'한다고 하셨고, 그것이 '다음 데이터를 반환한다' 라는 말씀이라 하셨습니다. 제가 이해가 잘 안되는데, 현재 데이터를 반환하고 다음으로 이동하는 것은 리턴값이 현재 값 이라는 것일테고 다음 데이터를 반환하는 것은 리턴값이 다음 데이터라는 말일텐데, 혹시 어느 것이 맞을까요 ..?
안녕하세요! '4-5 그래프' 강의 내용 중에 '인접 리스트'를 사용해 그래프를 표현하는 경우 공간복잡도가 최악의 경우에도 O(N)이라고 설명을 해주셨는데요! 그래프의 모든 노드가 다른 모든 노드에 연결되어있는 경우라면 딕셔너리 안에 N개의 키와 각각의 키에 크기 N-1의 1차원 배열이 들어가게 되니, 결국 N*(N-1) 만큼이 공간을 차지하여 최악의 경우 2차원 배열과 동일하게 O(N^2)의 공간복잡도를 가지게 되는 것은 아닌가 하는 생각이 들었는데요, 인접 리스트를 사용할 때 최악의 경우 어떻게 O(N)의 공간복잡도가 나오게 되는지 궁금합니다! 그리고, 일반적인 경우에는 모든 노드가 연결되어 있지는 않겠지만, 항상 이러한 최악의 경우도 고려하면서 문제를 풀어야 할지도 궁금합니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 제네릭 Set 4 부분 강의에서 질문드리고 싶은 점이 있어 여쭤봅니다. private int hashIndex(Object value){ return Math. abs (value.hashCode())%capacity; } 이 부분에서 매개변수가 E value가 아닌 Object 로 들어오는 이유는 타입 이레이저 때문일까요 ?
그래프 - 개념 (2:04) 해당 영상에서는 트리의 조건 중 하나로 연결되지 않은 노드가 없어야 한다고 설명하고 있습니다. 그런데 "트리와 이진 트리 - 개념" 영상에서는 터미널 노드는 루트 노드만 있는 트리로 볼 수 있다고 해서 뭔가 헷갈립니다. 하나의 노드만 있을 경우 즉, 연결되지 않은 노드가 없는 경우, 이것도 트리라고 할 수 있는 거 아닌가? 라고요 ㅠ