김영한 멘토님 안녕하세요 강의를 듣다가 질문이 있어서 질문 남깁니다! HashSet 자료구조를 사용해 객체를 저장할때, HashCode와 equals를 재정의 해야한다고 말씀해 주셨는데요. 정말 멘토님 말대로 재정의 하지 않으면 값이 중복되어서 저장되었습니다. 근데 궁금한것은 HashSet 자료구조이기에 HashCode를 사용하는것은 아는데, 그 이전에 자료구조가 Set의 기반의 자료구조인데 Set은 원래도 중복된 값을 허용하지 않는걸로 알고있습니다. 근데 왜 HashCode를 재정의해야 그때서야 값이 중복되어서 저장되지 않는것인가요? 애초에도 Set 기반의 자료구조인데 말입니다.
안녕하세요, 강의를 듣고 계신 여러분! 여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기 단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요! 강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지 를 명확히 제시해 주시면 답변에 도움이 됩니다! 자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 자신은 어떻게 이해했는지 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 어떤 부분이 궁금한지 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 안녕하세요! 강의 잘 듣고 있습니다. 백준 1461 그리디 마지막 문제에 대한 질문이 있는데요. 보기 전에 풀어보긴 했는데, 두더지 잡다가 어떻게 된 느낌이긴 해요.. 음,, 아직 습관이 안 고쳐지기는 했는데 정의하고 분석하고 따져보고 그려본 다음에 해야 하는데,, 그 제가 처음 푼 방식은 리스트 요소를 지워가며 해결하는 방식인데요 양/음수가 m으로 떨어지지 않는 나머지 경우를 먼저 따져 합계에 더하고, 제거한 뒤 먼 데부터 다녀오는데, 최댓값을 계속 갱신해서 가장 먼 거리를 나중에 빼주는 방식으로 했어요.. m으로 나누어 떨어지지 않는 경우에 대한 처리를 나중에 추가했는데요 선생님의 코드가 어떻게 그 경우도 잘 처리하는 지 분석이 잘 안되어서.. 설명 부탁 드려요.. 아! 저번 설명 너무 감사합니다 더불어 약간 공부하는 루틴?이랄까? 그런 것도 말씀해 주실 수 있는 게 있다면 혹시 말씀 부탁드려요..(코테 공부도 그렇고 다른 것도 그렇고..) 아래는 제가 처음 정답 받은 코드입니다. (코드가 지저분함에 죄송해요..) import sys input = sys.stdin.readline # 방향을 결정하고 상자 들고 다음에 처음 갈 책 위치를 반환합니다. def getPos(arr): global direction maximum = max(map(abs, arr)) if maximum in arr: if len(arr) > m: direction = False if min(arr) >= 0: direction = True return 0 for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i else: direction = True for i in range(len(arr)): if arr[i] >= 0: return i else: if len(arr) > m: direction = True if max(arr) < 0: direction = False return len(arr) - 1 for i in range(len(arr)): if arr[i] >= 0: return i else: direction = False for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i return -1 n, m = map(int, input().rstrip().split()) arr = list(sorted(map(int, input().rstrip().split()))) cnt = 0; direction = True; reach = 0; plusCount = 0; minusCount = 0 #양수/음수 따로 헀어야 좋았는데, 하다보니 개수 세는 걸 만들었어요.. def count(): global plusCount, minusCount for i in arr: if i >= 0: plusCount += 1 elif i < 0 : minusCount += 1 count() #양수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if plusCount % m != 0: mini = min(i for i in arr if i >= 0) idx1 = arr.index(mini) idx2 = min(arr.index(mini) + (plusCount % m), len(arr)) reach = arr[idx2 - 1] for i in range(idx1, idx2): arr.remove(arr[idx1]) cnt += reach * 2 #음수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if minusCount % m != 0: maxi = max(i for i in arr if i < 0) idx1 = arr.index(maxi) idx2 = max(arr.index(maxi) - (minusCount % m), -1) far = abs(arr[idx2 + 1]) for i in range(idx1, idx2, -1): arr.remove(arr[idx2 + 1]) cnt += far * 2 reach = max(reach, far) # 이럴 필요 없는데, 돌면서 먼 데 구하고 그 안쪽? 지우는 방식으로 했어요.. while arr: pos = getPos(arr) far = abs(arr[min(len(arr) - 1, pos + m - 1) if direction else max(0, pos - m + 1)]) for i in range(m): if not arr: break arr.remove(arr[pos]) if not direction or pos == len(arr): pos = max(pos - 1, 0) cnt += far * 2 reach = max(reach, far) print(cnt - reach)
제곱수의 합문제요.. 6일 경우 제곱이 되려면 루트6밖에 안되는데 왜 2가 2로 떨어지는 약수의 개수로 카운팅되는지 이해를 못하겠네요… 또 3의 제곱 5의 제곱은 왜 고려안하는지도… ( 이미 이해 다 됐다고 가정해서 말씀하신건지도 모르겠습니다.ㅠㅠ ) 바보도 알고리즘 천재로 만들어주신다고 들어서 잘 알려주시면 감사드리겠습니다 ㅠㅠ
안녕하세요. 강사님께서 제공해주신 이분탐색 1번 2번 코드중 2번 코드로 새로운 문제를 풀려고 합니다. 1번 코드(left와 right 설정)으로는 잘 풀리는데 2번 코드(cur과 step 설정)로는 잘 안풀리네요. 백준 2343번 기타문제를 강사님께서 제공해주신 코드로 풀려고 아래와 같이 코드를 짜보았습니다. 하지만 원하는 결과를 얻지 못했는데요. 어떤 부분이 잘못된건지 알려주실 수 있을까요?? nums, blue_nums = map(int, input().split()) bluelay_length = list(map(int, input().split())) def check(length): count = 1 current_length = 0 for i in bluelay_length: if current_length + i <= length: current_length += i else: current_length = i count += 1 return count == blue_nums cur = 0 steps = 10000+1 while steps > 0: while cur + steps <= 10000+1 and check(cur + steps): cur += steps steps //= 2 print(cur) 감사합니다.
안녕하세요, 강의를 듣고 계신 여러분! 여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기 단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요! 강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지 를 명확히 제시해 주시면 답변에 도움이 됩니다! 자신은 어떻게 이해했는지 또한 적어주면 좋습니다! 강의 중 브루트포스 알고리즘 마지막 백준 1342번 행운의 문자열 문제입니다. 순열로 접근한 처음 코드 시간 초과 후 선생님 강의 설명을 들으면서 백트래킹으로 수정했는데요, 근데,, 로직은 거의 차이가 없고 다만 초기화나 선언 등 순서의 차이 같은데, 저는 시간 초과를 해결 하지 못했고, 선생님 코드를 복붙,,, 했더니 성공하더라구요 😓 그래서 어떤 차이 분석을 할 수 있을지 질문 남깁니다. 코드는 아래와 같고 풀이2번을 참고하였습니다.(시간초과 코드입니다) import sys input = sys.stdin.readline s = input() choice = [] dic = dict() chars = set() cnt = 0 for l in s: chars.add(l) if l not in dic: dic[l] = 0 dic[l] += 1 def dfs(level): global cnt, choice, dic if level == len(s): cnt += 1 return for l in chars: if dic[l] == 0: continue if (not choice) or (choice[-1] != l): dic[l] -= 1 choice.append(l) dfs(level + 1) dic[l] += 1 choice.pop() dfs(0) print(cnt)
저는 강의를 한번 다듣고나서 강의 도중 강사님께서 코드 작성하신것을 바탕으로 백준 문제에 대한 풀이를 수행하고 있습니다. 그러다 보니 문제 풀이가 기억이 안나거나 헷갈리는 부분이 있을때 수업 자료의 솔루션 코드를 참고하고자 하는데, 그럴때마다 수업 도중 본 코드와 상이하여 당황스럽습니다. 강의 중 짠 코드를 바탕으로 수업자료 끝의 솔루션 코드를 작성해주시면 더 도움이 될것 같습니다.
안녕하세요, 강의를 듣고 계신 여러분! 여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기 단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요! 강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지 를 명확히 제시해 주시면 답변에 도움이 됩니다! 자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ash: python: command not found [Finished in 16ms with exit code 127] [shell_cmd: python -u "/Users/sindonghui/Desktop/ test.py " < input.txt] [dir: /Users/sindonghui/Desktop] [path: /Library/Frameworks/Python.framework/Versions/3.12/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/ com.apple.security .cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/ com.apple.security .cryptexd/codex.system/bootstrap/usr/bin:/var/run/ com.apple.security .cryptexd/codex.system/bootstrap/usr/appleinternal/bin] 밑에 이렇게 떠요 ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 자신은 어떻게 이해했는지 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 어떤 부분이 궁금한지 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 데이터를 삭제하는 기능에서 removeNode 를 null 값으로 처리하는 이유가 있을까요? removeNode 를 더 이상 사용되지 않는 것 같은데, 해당 노드의 item 과 next 를 null 값으로 처리해야만 GC 대상이 되는건가요? null 값으로 명시하지 않아도 될 것 같아 질문드립니다. // 추가 코드 public Object remove(int index) { Node removeNode = getNode(index); Object removedItem = removeNode.item; if (index == 0) { first = removeNode.next; } else { Node prev = getNode(index - 1); prev.next = removeNode.next; } removeNode.item = null; removeNode.next = null; size--; return removedItem; }
public class ItemPriceTest { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("사과", 500); map.put("바나나", 500); map.put("망고", 1000); map.put("딸기", 1000); // 코드 작성 ArrayList<String> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { if (entry.getValue().equals(1000)) { list.add(entry.getKey()); } } System.out.println(list); } } 여기서 entry.getValue() 의 비교를 == 으로 바꿔도 돌아가는데 상관없을까요? 객체의 경우 == 이냐, equals냐에 따라 동일성, 동등성 비교로 나뉘는거같은데 이와같이 값 비교 할 땐 둘 다 사용할 수 있는걸까요? == 을 사용해도 망고, 딸기가 출력되어 여쭤봅니다 [질문 내용] 여기에 질문 내용을 남겨주세요.
안녕하세요. 나머지 합 구하기 핵심 아이디어 중 첫 번째 (A+B)%C는 ((A%C) + (B%C)) % C와 같다. 는 것은 본 문제를 푸는 데에는 직접적 관련이 없는 것 같은데 어떻게 관련이 되어 있는지 궁금합니다. 문제가 연속된 부분의 합의 나머지를 구하는 것인데, (A[i+1] + ... + A[j])%M = (S[j] - S[i])%M 이 되고, 나머지 연산이 linear 연산이기 때문에 (S[j] - S[i])%M = 0이라면 S[j]%M = S[i]%M 이라고 할 수 있을 것 같아서요. 이 경우에 핵심 아이디어 2번째, 3번째로도 문제 풀이가 가능한 것 같은데, 핵심 아이디어 1번째는 어떤 역할을 하는지 궁금합니다. 감사합니다. 이 되어
Regular languages: deterministic and non-deterministic finite automata, regular expressions. Context-free languages: context-free grammars, push-down automata. Turing machines, the Chomsky hierarchy, and the Church-Turing thesis. Introduction to Complexity Theory and NP-Completeness. 안녕하세요 선생님. 항상 강의 잘 듣고 있습니다. 혹시나 이거를 다루어주시는 강의가 혹시 있을까요?
아무리 코드를 봐도 잘못된게 없어서 백준 사이트 확인해보니 단맛 입력인 A 끼리는 곱하고 짠맛인 B 끼리는 더해야 해당 입력에 대한 올바른 출력값 (문제에서는 1) 이 나옵니다. 그냥 recur(idx+1, dan+ingre[idx][1], zzan*ingre[idx][0], use+1) 이렇게 인덱싱만 바꿨습니다. 아니면 제가 혹시 문제를 잘못 이해한걸까요..?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이번 강의를 시청하고 enum을 제대로 공부를 안했구나 느껴서 다시 중급1편을 보고 왔는데도 Card 객체에서 suit를 생성자로 값을 주입하는걸 너무 이해가 안됩니다. enum타입은 상수라서 그냥 생성자를 이용해서 넣지않고 바로 사용하면 되는거 아닌가요? compareTo, toString에 사용하기 위해 생성자를 이용해서 주입을 하신건가요?