묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
딕셔너리를 활용한 two-sum 질문있습니다
기존코드def two_sum(nums, target): memo = {} for v in nums: memo[v] = 1 for v in nums: needed_number = target - v if needed_number in memo: return True return False기존 코드에서 첫번째 for문은 O(n)이고두번째 for문은 O(1)이 n번 실행되니까 최종적으로는 O(n)이 되어서 해당 알고리즘의 시간복잡도는 O(n)이되는데처음에 문제를 설명해주실때의 순서대로라면 4를 먼저넣고 target이 14니까 10이 있는지 확인해보고 없으니까 1을 넣고 13이없는지 확인해보고 없으니까 9를 넣고 5가 없으니까 7을 넣고 7이 없으니까 5를 넣고 9가 있으니까 true를 반환 이라고 생각을 했고 그렇게 로직을 짜면 아래와 같은 코드가 될것같습니다(제가 파이썬을 잘 몰라서 정확한지는 모르겠네요 ㅠㅠ)def two_sum(nums, target): memo = {} for v in nums: memo[v] = 1 needed_number = target - v if needed_number in memo: return True return False해당 코드에서는 첫번째 for문 내부의 시간복잡도가 전부다 O(1)이고 그걸 n번 반복하는것이니 O(n)이라는 최종적인 시간복잡도라고 생각을 하는게 맞을까요??만약에 아래에 짠 로직이 올바른 로직이라면위에 로직은 n번 연산하면서 dictionary에 넣고 후에 요소를 돌면서 답을 찾고아래로직은(코드가 맞다면) dictionary를 다 넣지 않더라도 중간에 값이 나오면 중간에 연산을 끝낼 수 있으니까 조금더 효율적이라고 생각을 했습니다제가 생각한 방식이 맞는지 그리고 이런 작은(?)효율성이 코딩테스트에서 의미있게 다가올지가 궁금합니다!
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
최소힙의 결과값과 최대힙->최소힙 결과값이 다른게 맞나요?
최소 힙 insert#reheapUp(index) { // index 0은 root if (index > 0) { // 부모 노드가 root가 아니면 계속 비교 const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] < this.arr[parentIndex]) { // 값 바꾸기 const temp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = temp; this.#reheapUp(parentIndex); } } } // O (log n) insert(value) { this.arr.push(value); this.#reheapUp(this.arr.length - 1); }const heap = new MinHeap(); // insert는 큰 값부터 넣고, root가 8이 되는지 확인 heap.insert(78); heap.insert(56); heap.insert(45); heap.insert(32); heap.insert(23); heap.insert(19); heap.insert(8); // [8, 32, 19, 78, 45, 56, 23] heap; 최대 힙 insert#reheapUp(index) { // index 0은 root if (index > 0) { // 부모 노드가 root가 아니면 계속 비교 const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] > this.arr[parentIndex]) { // 값 바꾸기 const temp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = temp; this.#reheapUp(parentIndex); } } } // O (log n) insert(value) { this.arr.push(value); this.#reheapUp(this.arr.length - 1); }const heap = new MaxHeap(); // insert는 작은 값부터 넣고, root가 78이 되는지 확인 heap.insert(8); heap.insert(19); heap.insert(23); heap.insert(32); heap.insert(45); heap.insert(56); heap.insert(78); // [78, 32, 56, 8, 23, 19, 45] heap; 최대 힙 -> 최소 힙// 최소 힙 유지 함수 #heapifyMin(index) { // 수정, 삭제 const leftIndex = index * 2 + 1; const rightIndex = index * 2 + 2; const smallerIndex = (this.arr[leftIndex] || 0) < (this.arr[rightIndex] || 0) ? leftIndex : rightIndex; if (this.arr[index] > this.arr[smallerIndex]) { // 값 바꾸기 const temp = this.arr[index]; this.arr[index] = this.arr[smallerIndex]; this.arr[smallerIndex] = temp; // 재귀적으로 최소 힙 유지 this.#heapifyMin(smallerIndex); } } toMinHeap() { // O(1/2n) for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { this.#heapifyMin(i); } }const heap = new MaxHeap(); // insert는 작은 값부터 넣고, root가 78이 되는지 확인 heap.insert(8); heap.insert(19); heap.insert(23); heap.insert(32); heap.insert(45); heap.insert(56); heap.insert(78); // [78, 32, 56, 8, 23, 19, 45] heap.toMinHeap(); // [8, 23, 19, 32, 78, 56, 45] heap; // 최소 힙 insert 결과 값 [8, 32, 19, 78, 45, 56, 23] // 최대 힙 insert 결과 값 [78, 32, 56, 8, 23, 19, 45] // 최대 힙 -> 최소 힙 결과 값 [8, 23, 19, 32, 78, 56, 45] 최소힙 insert 결과 값과 최대 힙 -> 최소 힙 결과 값은 서로 다른데 최소 힙의 조건은 아래가 크고, 위가 작다. 라고 하셨으니 결과 값은 달라도 최소 힙의 조건이 맞으니 최대 힙 -> 최소 힙 변환 코드가 맞는걸까요?
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 2606
안녕하세요 선생님! 복습하다가 의문점이 생겨 질문드립니다.from collections import defaultdict N = int(input()) T = int(input()) dic = defaultdict(list) discovered = [] for _ in range(T): a, b = map(int, input().split()) dic[a].append(b) dic[b].append(a) def dfs(node): global dic, discovered discovered.append(node) for n in dic[node]: if n not in discovered: dfs(n) return dfs(1) print(len(discovered) - 1)이 코드에서 dic[b].append(a)를 지워도 문제 해결에는 영향이 없어 보이는데, 백준에 제출하면 틀린 답으로 나옵니다.즉, 그래프를 양방향이 아닌 단방향으로 설정해도 문제 없지 않나요..?
-
해결됨코딩테스트 [ ALL IN ONE ]
2차코테 관련해서 질문드립니다
코테를 볼때 1차 2차 나눠서 보는 기업이 있더라구요 (대표적으로 카카오)근데 1차는 알고리즘이고 2차는 api 통신을 해야하는 코테로 진행한다고 봤는데 이렇게 api통신을 이용해 코테를 보는 기업이 많을까요? 제가 찾을때는 카카오만 보여서 질문드렸습니다또 sql 코테를 보는곳도있다고 들었는데 이것도 많이 보는지 여쭤보고 싶습니다
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
백준 11720 숫자의 합 질문 있습니다
문제를 보면입력첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.라고 조건이 주어지는데 강의의 풀이를 보면 숫자의 개수를 N개로 제한하는 부분이 없고 실행해보면 N개 이상 또는 이하의 숫자가 들어가도 상관이 없이 실행되는데 보통 코테에서도 이런식으로 제한에 러프하게 코딩해도 상관이 없는 건가요?아니면 문제에 제한이 있어서 코딩에서는 제한을 따로 두지않는건가요??
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 링크 좀 보내주세요
노션 공유 요청 드리고 24시간 기다렸는데.......노션에 어떻게 들어가나요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.
점프왕 젤리문제에서 dfs 메서드에 dfs(int x, int y)가 아닌 dfs(int y, int x)인지 궁금합니다!이전 문제부터 계속 궁금해했는데, 왜 순서를 바꾸셨는지에 대한 명확한 이유를 못찾겠어서 질문올렸습니다.// 점프왕 젤리 import java.util.*; import java.io.*; class Jump_king_jelly { static final int MAX = 3 + 100 + 10; static int map[][]; static boolean visited[][]; static int N; static int dirY[] = {1, 0}; static int dirX[] = {0, 1}; public static void dfs(int y, int x) { visited[y][x] = true; if(y == N && x == N) return; for(int i = 0; i < 2; i++) { int newY = y + dirY[i] * map[y][x]; int newX = x + dirX[i] * map[y][x]; if(visited[newY][newX] == false) { dfs(newY, newX); } } } public static void main(String[] args) throws IOException { // 0. 입력 및 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); map = new int[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map에 정보 반영 for(int i = 1; i <= N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for(int j = 1; j <= N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } // 2. dfs 수행 dfs(1,1); // 3. 출력 if(visited[N][N]) bw.write("HaruHaru"); else bw.write("Hing"); bw.close(); br.close(); } }
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[최적화 (정수론) 21:41 강의 질문] 문제 설명 중에 8까지의 예시를 이해하기 어렵습니다.
안녕하세요 강사님!파이썬 코딩테스트 도전하고 싶은 코린이입니다.강의를 듣고 있던 와중에 21:41초에서 계산하는 8까지의 예시 케이스를 설명하는데, 결과로 나오는 수열이 어떤 수열인지, 연산은 어떻게 되는건지 잘 이해가 되지 않습니다... 1 2 3 4 5 6 7 81 2 1 ... <<< 이게 무슨 수열인거죠? 어떻게 나온거죠? 조금만 더 상세히 설명해주시면 감사하겠습니다...문제 지시문과 영상을 여러번 읽어보아도 잘 이해가 되지 않아서 질문 남깁니다!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
코딩 센세 입니다!
이번에 이직 후 회사에서 많은 것을 배우고 밤늦게까지 정리하며 잠드는 날들을 반복하고 있습니다! (외국어의 벽도 느끼고 있습니다 ... 하하 ) 질문해주신 질문들의 답변을 못달아드려서, 강의 수정을 빨리 빨리 못해드려서 정말 죄송합니다 ㅠㅜ... 항상 많은 질문 해주시고 공부해주시는 분들 감사합니다! 바로 답변을 못달아드릴때도 있지만 제 강의 열심히 들으시고 생기시는 궁금증들 질문해주시는 건 정말 정말 기뻐요 😄 제가 바로 답을 못 드리더라도 꼭 답을 드릴테니 간단한 궁금증이나 생각들도 모두 커뮤니티에 꼭 남겨주세요! 항상 많은 힘을 주셔서 감사합니다 😃 !!!!! 오늘도 다들 화이팅이에요!
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
22479번 문제 런타임 에러 도와주세요 ㅠㅠ
24479번, 강의 사진과 같이 아래 링크처럼 파이썬으로 코딩했는데, 런타임 에러가 나고 있어요 ㅠㅠ 도와주세요 https://www.acmicpc.net/source/70097735 강의 영상마다 질문이 있으면 언제든 그리고 바로 질문 남겨주세요! 질문할 때 가장 정확하게 이해할 수 있습니다.해당 영상과 관련된 질문들을 해주실 때 제가 가장 정확히 답변 드릴 수 있습니다!취업 전반의 상담이나, "제 코드가 왜 틀렸는지 알려주세요"와 같이 광범위한 질문은, 질문자의 상황에 따라 답변이 달라질 수 있기 때문에, 정확한 답변을 드리기가 어렵습니다 :(이런 분들을 위해서는 멘토링 항목으로 별도 제공하고 있으니, 다음 링크를 참고해주세요!이 링크를 통해서는 본인의 코드가 왜 틀렸는지 모를 때 질문을 주셔도 좋고, 취업 전반(면접 준비, 자소서, CS 면접 등)에 관련한 질문을 주시면 답변 드리겠습니다 :)"이 질문은 해도 되나?"라는 생각이 드신다면 우선 남겨주세요! 제가 답변 드리기 어려운 건 멘토링에 올려 달라고 재요청 드리겠습니다 :)
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1강 문제2 (백준 # 14568)
n = int(input()) answer = 0 for i in range(1, n+1): for j in range(1, n+1): for k in range(1, n+1): if i + j + k == n: if i % 2 == 0: if j >= k+2: if i >= 1 and j >= 1 and k >= 1: answer += 1 print(answer)왜 if i >= 1 and j >= 1 and k >= 1: 이 조건이 없어도 정답처리가 되나요??
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
(숫자의 합)1<=N <=100 사이의 값
N이 1과 100사이의 값이 왜 char인지 보기위해서 모든타입의 범위를 보았는데 char 범위가 \u0000~\uffff(0~2^15-1)이더라구요 이게 1과 100의 값인건가요?
-
미해결코딩테스트 [ ALL IN ONE ]
o(1)과 o(n)이 헷갈려요
big o(1)은 한번의 연산만 한다는건 이해를했는데 o(n)은 정확히 어떤뜻인지 모르겠어요..
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
소수구하기-백준 1929 질문
안녕하세요 강의 너무너무 잘보고 있습니다소수구하기 백준 1929 강의 중for(소수의 배수값을 N까지 반복) for (int j=i+i; j<=N; j=j+i){ }이 부분에서 for문 시작 ( j=i+i )이랑 증감식 ( j=j+i ) 이 이해가 잘 되지않아질문 남깁니다.그리고 저 for문은 컨티뉴일 경우에는 실행이 안되는건가요 ?(ex)4이면 컨티뉴 >> 하고 for문을 도는건가요?) 감사합니다
-
해결됨코딩테스트 [ ALL IN ONE ]
백트래킹 강의 언제 올라오나요?
다른 글에서 12월 1일안에 다 올라온다는 글을 봤는데 아직도 안올라와서요
-
해결됨코딩테스트 [ ALL IN ONE ]
공부 방법에 대해 질문이 있습니다.
처음에는 문제만 보고 1시간정도 고민해서 발상이 떠오르지 않았을 때만 발상 관련 강의를 보고, 그 다음에 또 1시간 동안 고민해서 발상을 코드로 옮기는 작업을 했는데도 테스트 케이스를 통과하지 못해서 마지못해 코드 구현 강의를 보았습니다. 그런데 이러한 bfs, dfs문제는 그냥 틀이므로 암기하라고 하셨을 때 허탈감이 들었습니다. 이러면 그냥 코테문제의 전형적인 틀이라고 받아들이고, 암기한 방법으로 다른 문제에 응용하면 되나요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
(메타클래스) 해당 강의 코드 혹시 올려주실 수 있을까요?
질문은 많으시면 많을수록 좋습니다. 가능한 빠른 답변 드리겠습니다.원활한 답변을 위해, 자세한 질문 사항 부탁드려요 열심히 타이핑해서 저장을 해뒀는데 실수로 삭제를 해버렸네요. 복습 겸 다시 듣고 있는데 혹시 다른 강의처럼 코드를 올려주실 수 있을까요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 질문있어요.
search -> edit -> save 중 save에 궁금한 게 있습니다.int SaveNodeToFile(MYNODE* pNode)를 보면파일에서 불러낸 경우만 고려돼있습니다.신규 데이터를 찾아서 수정하는 경우에는 저장하지 않고 프로그램 종료 시 신규 데이터 일괄로 저장하는 방법을 써야할까요? pNode->bNew 값을 따져서 신규인지 구분하고 ab+모드로 파일 끝에 저장하는 건 생각했는데파일에 저장했으니 bNew를 false로 수정해야하나?수정하면 offset이 0이라 다시 검색할 때 offset이 0인 데이터를 찾을텐데? 그럼 offset 값은 어떻게 주지? bNew 값을 true로 저장하고 신규 데이터 일괄 저장할 때 덮어 써야하나? 라는 고민에 빠졌습니다. 어떤 방법이 좋을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
강의자료 노션 링크 언제 보내주시는 걸까요?
어제 노션 링크 요청드렸었는데, 혹시 언제 받아볼 수 있나요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
#11653 소인수분해 문제(최적화 관련)
아래와 같이 코드를 작성하였는데 답은 맞췄지만 강의에서 말씀하신 제곱근 아이디어가 반영되어있지 않습니다.아래 코드를 더 최적화 할 수 있는 아이디어가 있나요? #11653 소인수분해 N = int(input()) divide = True while(divide): for i in range(2, N+1): if N % i == 0: print(i) N = N//i break if N == 1 : divide = False