묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
쿼드트리 구현 강의자료에 포함된 LQNode의 GetQuads함수에 궁금한 점이 있습니다.
LooseQuadTree의 Query함수 호출 시 겹칠 가능성이 있는 모든 LQNode를 수집할 때 일부 결과가 누락된 것으로 판단되어서 문의합니다.강의 자료의 Query함수의 기능이 틀린 내용인지, 아래 내용이 옳은지 그리고 더 최적화된 로직이 있는지 궁금합니다.public LQNode(LQuadtree tree, LQNode parent, Bounds bounds, int depth) { _tree = tree; _parent = parent; _bounds = bounds; _looseBounds = new Bounds(bounds.center, bounds.size * tree._constantK); _depth = depth; } private List<LQNodeIndex> GetQuads(Bounds bounds) { List<LQNodeIndex> quads = new List<LQNodeIndex>(); if (_children[(int)LQNodeIndex.UPPERLEFT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.UPPERLEFT); } if (_children[(int)LQNodeIndex.UPPERRIGHT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.UPPERRIGHT); } if (_children[(int)LQNodeIndex.LOWERRIGHT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.LOWERRIGHT); } if (_children[(int)LQNodeIndex.LOWERLEFT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.LOWERLEFT); } return quads; }
-
해결됨코딩테스트 [ ALL IN ONE ]
디스코드 초대장이 올바르지 않다고 뜹니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨Go Hard to C (feat. Algorithm)
음질이 안좋습니다
초반부 듣고 있는데 말 중간 중간에 소리가 계속 끊겨서 들립니다. 잡음도 간간히 들리네요.영상 촬영하시고 검수해보셨나요..
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
DNA 비밀번호 (백준 12891) 통과가 안됩니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[] myArr; // 내가 받은 문자열의 부분 문자열 조건 만족하는지 확인용 static int[] checkArr; // 주어진 부분 문자열 조건 static int checkSecret; // 모두 만족하는지 카운트 public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int S = Integer.parseInt(stringTokenizer.nextToken()); // 문자열의 길이 int P = Integer.parseInt(stringTokenizer.nextToken()); // 부분 문자열의 길이 int result = 0; myArr = new int[4]; checkArr = new int[4]; checkSecret = 0; char[] A; // 주어진 문자열을 담을 배열 A = bufferedReader.readLine().toCharArray(); stringTokenizer = new StringTokenizer(bufferedReader.readLine()); for(int i = 0; i < 4; i++) { checkArr[i] = Integer.parseInt(stringTokenizer.nextToken()); if(checkArr[i] == 0) { // 주어진 조건이 0이면 이미 만족하기 때문에 checkSecret을 1증가시켜줌 checkSecret++; } } for(int i = 0; i < P; i++) { // 부분 문자열 처음 받을때 세팅 Add(A[i]); } if(checkSecret == 4) { result++; } for(int i = P; i < S; i++) { // 슬라이딩 윈도우 int j = i - P; Add(A[i]); Remove(A[j]); if(checkSecret == 4) { result++; } } System.out.println(result); bufferedReader.close(); } private static void Remove(char c) { switch (c) { case 'A': if (myArr[0] == checkArr[0]) { checkSecret--; myArr[0]--; } break; case 'C': if (myArr[1] == checkArr[1]) { checkSecret--; myArr[1]--; } break; case 'G': if (myArr[2] == checkArr[2]) { checkSecret--; myArr[2]--; } break; case 'T': if (myArr[3] == checkArr[3]) { checkSecret--; myArr[3]--; } break; } } private static void Add(char c) { switch (c) { case 'A' : myArr[0]++; if(myArr[0] == checkArr[0]) { checkSecret++; } break; case 'C' : myArr[1]++; if(myArr[1] == checkArr[1]) { checkSecret++; } break; case 'G' : myArr[2]++; if(myArr[2] == checkArr[2]) { checkSecret++; } break; case 'T' : myArr[3]++; if(myArr[3] == checkArr[3]) { checkSecret++; } break; } } }로컬에선 문제없이 동작하는데 백준에서는 계속 통과가 안되네요.. 혹시 동일하신분들 계실까요?
-
미해결오픈소스 자료구조 및 알고리즘 in C
메모리 풀링 속도 확인
안녕하세요, malloc() 대신 스택 변수로 NODE 배열을 만들어서 사용하는 것을 보았는데요,정말로 빠른지 확인해보고 싶은데 어떻게 할 수 있을까요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
촌수 계산
count라는 매개변수를 같이 전달해주기 보다 dfs가 호출될 때마다 answer를 넣어주는 방식으로 풀어봤는데 왜인지 end 값을 찾았을 때 return이 적용이 안되는 거 같습니다. 혹시 어떤 문제가 있는지 봐주실 수 있나요? import java.util.*; import java.io.*; class Main { static int N, start, end, M; static boolean[] visited; static ArrayList<Integer>[] graph; static int answer = -1; private static void dfs(int i) { if (i == end) { System.out.println("end: " + end); return; } visited[i] = true; for (int j = 0; j < graph[i].size(); j++) { int next = graph[i].get(j); if (visited[next] == false) { System.out.println("next: " + next); dfs(next); answer++; } } } public static void main(String[] args) throws IOException{ // 입력 및 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); // 노드의 개수 StringTokenizer st = new StringTokenizer(br.readLine()); start = Integer.parseInt(st.nextToken()); // 시작 노드 end = Integer.parseInt(st.nextToken()); // 끝 노드 System.out.println(end); M = Integer.parseInt(br.readLine()); // 간선의 개수 visited = new boolean[N+1]; // graph 선언 후 초기화 graph = new ArrayList[N+1]; for (int i = 1; i <= N; i++) { graph[i] = new ArrayList<>(); } for (int i = 1; i <= M; i++) { st = new StringTokenizer(br.readLine()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); graph[x].add(y); graph[y].add(x); } System.out.println(Arrays.toString(graph)); // dfs 호출 dfs(start); System.out.println(answer); bw.close(); br.close(); } }
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
구현 연습에 대한 개인적 의문
제가 나름 강사님의 큰 틀의 사고를 이용해서 구현을 하는데 차이가 약간씩 나고 있습니다. 이걸 코드 수준에서 동일하게 하도록 연습을 해야 할 지 아니면 저의 사고를 우선으로 하고 차이를 조정을 해야할지 고민이 있어 질문 드림니다!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
완전탐색 1090 문제 질문드립니다.
for y in arr_y: for x in arr_x: 제공해주신 코드에서 y,x 각 축을 꼭 다돌아야 하는건가요?강사님이 설명해주신부분에서 여러명이 한곳에서 모일때 비용을 최소화하기위해서는 여러명중 한명의 집에서 모이면된다. 라는 부분을 참고하면 입력된 4개의 좌표(집)값에 대해 각 좌표 값에대해 나머지 좌표값들의 거리를 계산하면 되는거아닌가요..??for ex, ey in arr: # [15, 14], [15, 16], [14, 15], [16, 15] for x, y in arr: # [15, 14], [15, 16], [14, 15], [16, 15]이런식으로요조언 부탁드립니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
노션공유 부탁드립니다.ㅏ
안녕하세요. 노션 공유 부탁드립니다. 노션 가입계정과 인프런가입계정이달라서 어디로 노션공유가 갔는지 모르겠습니다. paylin@naver.com 계정으로 노션 공유메일 발송해주실 수 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유해주시면 감사드리겠습니다.
구글폼으로 작성하였습니다.
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
자바 ArrayList와 LinkedList의 장단점
저번 강의에서 배열과 연결리스트의 장단첨 차이에는배열은 참조 속도가 상대적으로 빠르지만 데이터 삽입/삭제가 상대적으로 느리고연결리스트는 그 반대로라고 배웠는데요 자바의 ArrayList와 LinkedList랑 비교해도 똑같은 장단점을 가지나요?일반 배열과 달리 ArrayList는 처음에 크기를 할당하지 않아도 되니 오버헤드가 좀 감소할 것 같은데, 그래도 데이터 삽입 삭제 시 나머지 데이터의 이동이 필요하기 때문에 여전히 LinkedList 보단 속도가 느릴까요?
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
deleteAt() 질문
// 변경 전 for (let i=0; i < index - 1; i++) { currentNode = currentNode.next; } let deleteNode = currentNode.next; currentNode.next = currentNode.next.next; // 변경 후 for (let i=0; i < index; i++) { currentNode = currentNode.next; } let deleteNode = currentNode; currentNode = currentNode.next;deleteAt()의 나머지 노드에서 삭제 구현 코드에서 '변경 후'와 같은 코드는 제대로 삭제되지 않는 이유가 무엇인가요? 똑같이 동작할거라 생각하고 임의로 변형해봤는데 값에 변화가 없네요.변경 전의 currentNode.next.next 와 변경 후의 currentNode.next 둘 다 값이 없어 참조하지 않는 건 똑같은데..currentNode.next를 참조할 값이 없게 하는거랑currentNode를 참조할 값이 없게 하는거랑 다르게 처리되는건가요?아니면 아예 다른 포인트에서 틀린건지.. 궁금합니다
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
연결 요소의 개수 (백준 11724)
강의 영상마다 질문이 있으면 언제든 그리고 바로 질문 남겨주세요! 질문할 때 가장 정확하게 이해할 수 있습니다.해당 영상과 관련된 질문들을 해주실 때 제가 가장 정확히 답변 드릴 수 있습니다!취업 전반의 상담이나, "제 코드가 왜 틀렸는지 알려주세요"와 같이 광범위한 질문은, 질문자의 상황에 따라 답변이 달라질 수 있기 때문에, 정확한 답변을 드리기가 어렵습니다 :(이런 분들을 위해서는 멘토링 항목으로 별도 제공하고 있으니, 다음 링크를 참고해주세요!이 링크를 통해서는 본인의 코드가 왜 틀렸는지 모를 때 질문을 주셔도 좋고, 취업 전반(면접 준비, 자소서, CS 면접 등)에 관련한 질문을 주시면 답변 드리겠습니다 :)"이 질문은 해도 되나?"라는 생각이 드신다면 우선 남겨주세요! 제가 답변 드리기 어려운 건 멘토링에 올려 달라고 재요청 드리겠습니다 :)1. 저번 강의에서 풀이하신 것처럼 이번 강의에도 재귀 함수의 depth를 그려보았는데 맞나요?2. 혹시 CS 면접 관련해서 대략 어떻게 준비해야 하는지 질문 드려도 되나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
개인 블로그에 정리하여 업로드
안녕하세요 지식공유자님덕분에 많은 도움이 되고 있습니다.강의 영상 캡쳐 및 내용 정리를 활용하여 개인블로그에 업로드해도 될까요? 출처는 해당 인프런 강의 링크를 달도록하겠습니다.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
LCA 빠르게 구하기 Java 코드 시간초과
P11438 문제 교재 코드 그대로 쳤는데 시간초과가 발생하네요 ㅜ어딜 고쳐야 할까요 ㅠimport java.util.*; import java.io.*; public class Main { static ArrayList<Integer>[] tree; static int[] depth; static int kmax; static int[][] parent; static boolean[] visited; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // 노드의 수 tree = new ArrayList[N + 1]; for(int i = 1; i <= N; i++) { tree[i] = new ArrayList<Integer>(); } StringTokenizer st; // 1. 인접리스트에 그래프 데이터 저장하기 for(int i = 0; i < N - 1; i++) { st = new StringTokenizer(br.readLine()); int s = Integer.parseInt(st.nextToken()); int e = Integer.parseInt(st.nextToken()); tree[s].add(e); tree[e].add(s); } depth = new int[N+1]; visited = new boolean[N + 1]; int temp = 1; kmax = 0; while (temp <= N) { // 최대 가능 depth 구하기 temp <<= 1; kmax++; } parent = new int[kmax + 1][N + 1]; // 2. depth와 바로 윗 부모 bfs로 구하기 bfs(1); // 3. 2^k 부모 구하기 for(int k = 1; k <= kmax; k++) { for(int n = 1; n <= N; n++) { parent[k][n] = parent[k - 1][parent[k - 1][n]]; } } int M = Integer.parseInt(br.readLine()); // 4. 질의 수행하기 for(int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int LCA = excuteLCA(a, b); System.out.println(LCA); } } static int excuteLCA(int a, int b) { // 더 깊은 depth가 뒤에 오도록 변경 if (depth[a] > depth[b]) { int temp = a; a = b; b = temp; } for(int k = kmax; k >= 0; k--) { // 높이 빠르게 맞추기 if(Math.pow(2, k) <= depth[b] - depth[a]) { if(depth[a] <= depth[parent[k][b]]) { b = parent[k][b]; } } } for(int k = kmax; k >=0; k--) { // 조상 빠르게 찾기 // 최대 위로 올라가서 같은 부모를 가리키면 k를 1씩 감소하며 다른 지점을 찾음 if(parent[k][a] != parent[k][b]) { a = parent[k][a]; b = parent[k][b]; } } // 여기 온 것은 k = 0일때 고려 // case 1. k=0, 둘이 같은 노드를 가리킴 -> 그곳이 최소 공통 조상 // case 2. k=0, 둘이 다른 노드를 가리킴 -> 바로 위에가 최초 공통 조상 -> 2^0 위에 보기 int LCA = a; if(a != b) { LCA = parent[0][LCA]; } return LCA; } // bfs 구현 private static void bfs(int node) { Queue<Integer> queue = new LinkedList<>(); queue.add(node); visited[node] = true; int level = 1; int now_size = 1; int count = 0; while(!queue.isEmpty()) { int now_node = queue.poll(); for(int next : tree[now_node]) { if(!visited[next]) { visited[next] = true; queue.add(next); parent[0][next] = now_node; // 부모 노드 저장하기 depth[next] = level; // 노드 depth 저장하기 } } count++; // 자식 노드 모두 검사했는지 확인 if(count == now_size) { count = 0; now_size = queue.size(); level++; } } } }
-
해결됨코딩테스트 [ ALL IN ONE ]
오픈카카오톡 비밀번호
노션에 오픈카톡이 있던데 비밀번호가 있더라고요 혹시 입장코드 알수있을까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
5강 재귀 2번 요리사 문제
안녕하세요, 강의 전에 풀었을 때 다음과 같은 코드를 작성했는데 정답 인덱스가 비어있게 나오네요.혹시 왜 이런건지 알 수 있을까요? 강의자료에 있는 pop을 이용하는 방법은 이해했습니다.먼저 결과창입니다. 6 100 70 90 10 30 55 10 8 100 60 10 10 2 70 10 80 50 0 50 40 30 30 8 60 60 10 70 2 120 20 70 50 4 4 [1, 2, 3, 4, 5] [] [] [] [5] [3, 4, 5] [2, 3, 4, 5] [] [] 134 []코드입니다.n=int(input()) std= list(map(int, input().split())) ing=[list(map(int, input().split())) for _ in range(n)] price=1e9 tmp_best=[] best=[] def dfs(idx,a,b,c,d,p,check): global best global tmp_best global price if idx==n: if a>=std[0] and b>=std[1] and c>=std[2] and d>=std[3] : if p<price: price=p best=tmp_best.copy() print(best) tmp_best=[] else: tmp_best=[] return if check==1: tmp_best.append(idx) dfs(idx+1,a+ing[idx][0], b+ing[idx][1], c+ing[idx][2], d+ing[idx][3],p+ing[idx][4],1) dfs(idx+1,a,b,c,d,p,0) dfs(0,0,0,0,0,0,0) print(price, best)
-
해결됨코딩테스트 [ ALL IN ONE ]
디스코드 Doubly LinkedList 구현 코드 관련 질문
def insert(self, idx, value): new_node = Node(value) if idx == 0: new_node.next = self.head self.head = new_node else: current = self.head for _ in range(idx-1): current = current.next new_node.next = current.next current.next = new_node def remove(self, idx): if idx == 0: self.head = self.head.next # garbage collector가 알아서 처리해준다. else: current = self.head for _ in range(idx-1): current = current.next current.next = current.next.nextdef insert의 if문에서 self.head.prev=new_node 이렇게 연결지어주지 않아도 괜찮나요?def insert의 else문에서 new_node.prev=current current.next.prev=new_node 이 부분을 추가 안해도 괜찮나요?def remove의 if문에서 garbage collector가 알아서 처리해주신다고 했는데 1->2->3 이렇게 연결되어있고 인덱스 0인 1을 삭제한다고 했을 때 위의 코드대로 하면 head는 2를 가리킨 상태여도 1이랑 2는 아직 연결되어있는데 알아서 삭제가 되나요? 그래서 self.head.prev=None 이 코드를 추가해야된다고 생각했는데 맞을까요?def remove의 else문에서 마찬가지로 current.next.prev=current 문을 추가하지 않아도 괜찮나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
초기화할때 질문
이 영상 문제풀이에서 def __init__(self, homepage): self.head=self.current=ListNode(val=homepage) 이렇게 초기화를 해주셨는데 self.head=ListNode(val=homepage) self.current=ListNode(val=homepage) 이거와의 차이점이 뭔가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
[코테 적용] 영상에 나오는 노션글들은 어디에서 볼 수 있나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [코테 적용] 영상에 나오는 노션글들은 어디에서 볼 수 있나요? 올려주신 pdf파일에는 없는것같아서요!