묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
강의 자료 관련 문의
안녕하세요 수업 잘 듣고 있습니다! 강의 자료 중에 어떤 것에는 코드가 첨부되어 있고 어떤 것에는 코드가 첨부되어 있지 않은데, 혹시 첨부되어 있지 않은 것은 추후에 업로드가 되는 것인지 따로 코드가 제공되지 않는 것인지 궁금하여 질문 남기게 되었습니다! 감사합니다
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
큐 구현 질문 드립니다
안녕하세요,doublylinkedlist 에서 insertAt 수정 중에if(newNode.next == null){ //새로 삽입한 노드가 마지막 노드라면 this.tail = newNode; }이 부분은 index == this.count 일 때 데이터를 삽입하는 경우에만 해당되는 것 같은데,else if문 밖으로 빼서 공통적으로 처리해주는 이유가 궁금합니다. 감사합니다!
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
insertAt() for문 질문있습니다.
안녕하세요. 질문 두 가지가 있습니다. 프로그래밍 입문자이며 언어를 배운 적이 없는 상태입니다. 연결리스트 - 구현 강의 중 insertAt()의 for문 입력 후 왜 currentNode = currentNode.next를 입력해주는 건가요? currentNode 가 currentNode.next를 가리켜 둘은 연결되어 있다는 것을 가리키기 위함인가요? 이 코드 한 줄을 입력 안 할 경우 어떤 문제가 생기나요?그리고 10분 26초 쯤에currentNode(7)가 새로운 노드를 가리키면 된다고 설명하는데 왜 코드는 currentNode = newNode 가 아니라currentNode.next = newNode 인 건가요?후자가 될 경우 currentNode.next인 (9)가 newNode를 가리키게 되는 거 아닌가요? 감사합니다.
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
연결리스트 구현 return
다른 분께서 하신 질문을 보니 delete함수와 getNodeAt 함수에서 return을 하는 이유는 제거된 노드 값을 확인하거나 그 노드값을 얻기 위함이라고 하셨는데,delete함수에서 제거된 값은 왜, 그리고 어떻게 확인하는 것인지 이해가 가지 않아서 질문드립니다.저는 test.mjs 파일에서 console.log(this.deleteNode)를 입력하면 해당 변수의 값(제거된 값)이 출력될 것이라고 생각했으나TypeError: Cannot read properties of undefined (reading 'deleteNode')이러한 에러가 발생했습니다. deleteLast함수를 만들 때 return this.deleteAt(this.count-1); deleteAt함수에 이미 return이 포함되어 있는데 이 함수에 또 return을 포함하는 이유가 궁금합니다 감사합니다!
-
미해결코딩테스트 [ ALL IN ONE ]
자료구조 구현 및 해시 테이블 수강
안녕하세요, 어제부터 결제해서 잘 듣고 있는 학생입니다.저는 기계공학과를 전공하고 있고, 취업도 개발자 쪽을 하긴 하지만 IT기업이 아닌 중공업과 같이 기계공학과 관련있는 분야로 취직을 할 예정입니다.연구 분야 또한 기계 공학을 접목한 기계학습입니다.커리큘럼에 있는 연결리스트 (이건 직접 구현을 하는 것을 말합니다.)이나 해시테이블 같은 경우에는 제가 취직하려는 직종에서 잘 나오지 않는 알고리즘이라고 생각하는데 혹시 그래도 이를 꼼꼼히 공부를 해야할까요? (수강은 할 예정입니다.)
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
MAX 크기가 왜 1000000인가요?
정점의 수 N은 100,000개 까지인데이를 담는 배열의 최대 크기인 MAX가 왜1,000,000로 잡았는지 궁금합니다(+ 10은 연산 때문에 그렇다고 하셨던것같고)
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
안녕하세요 질문있습니다.
방향 그래프 무방향 그래프에 따라서 자료구조에 자료를 저장하는 방법이 다르다고 하셨습니다. 그런데 지금 이 문제에서는 방향그래프 아닌가요??간선,엣지들을 보면 모두 방향이 있는 거 같은데, 왜 무방향그래프를 저장할 때처럼 arraylist에 값을 저장하는지 모르겠습니다.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
union 코드에 질문 있습니다.
union 메소드 구현할 때 저는 find(a)와 find(b) 중 더 작은 수로 통일하기 위해 static void union(int a, int b) { int a_rep = find(a); // a의 대표값 int b_rep = find(b); // b의 대표값 int min = a_rep<b_rep ? a_rep:b_rep; parent[a] = min; parent[b] = min; } 이렇게 코드를 짰는데요.이렇게 하니 에러가 나는데 이유를 모르겠습니다 ㅠㅠ 늘 좋은 강의 감사합니다.
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 1325 질문있습니다!
안녕하세요! 강의를 다 듣고, 블로그에 남겨주신 문제들을 풀어보고 있습니다.'백준 1325 효율적인 해킹 문제'인데, 시간 초과가 나는 기준을 이해하지 못해서 질문드립니다!import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.StringTokenizer; public class Main { private static int N, M; private static List<List<Integer>> graph; private static boolean[] visited; private static int dfs(int idx) { visited[idx] = true; int count = 1; for (int next : graph.get(idx)) { if (!visited[next]) { count += dfs(next); } } return count; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); graph = new ArrayList<>(N + 1); for (int i = 0; i <= N; i++) { graph.add(new ArrayList<>()); } for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); graph.get(b).add(a); } int max = -1; List<Integer> answer = new ArrayList<>(); for (int i = 1; i <= N; i++) { visited = new boolean[N + 1]; int count = dfs(i); if (max < count) { answer.clear(); answer.add(i); max = count; } else if (max == count) { answer.add(i); } } Collections.sort(answer); StringBuilder sb = new StringBuilder(); for (int n : answer) { sb.append(n); sb.append(" "); } bw.write(sb.toString()); br.close(); bw.close(); } } 이렇게 작성을 하니 자꾸 시간 초과가 나와서 chat gpt에 질문해보니 메모이제이션을 사용하면 해결할 수 있다는 답변이 나왔습니다. 이미 visited를 사용해 이미 방문한 노드를 다시 방문하지 않는데, 메모이제이션을 사용하는게 의미가 있을까 싶었지만 일단 코드를 변경해봤습니다.import java.io.*; import java.util.*; public class Main { private static int N, M; private static List<List<Integer>> graph; private static boolean[] visited; private static int[] memo; private static int dfs(int idx) { if (memo[idx] != -1) { return memo[idx]; } visited[idx] = true; int count = 1; for (int next : graph.get(idx)) { if (!visited[next]) { count += dfs(next); } } memo[idx] = count; return count; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); graph = new ArrayList<>(N + 1); for (int i = 0; i <= N; i++) { graph.add(new ArrayList<>()); } for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); graph.get(b).add(a); } int max = -1; List<Integer> answer = new ArrayList<>(); for (int i = 1; i <= N; i++) { visited = new boolean[N + 1]; memo = new int[N + 1]; Arrays.fill(memo, -1); int count = dfs(i); if (max < count) { answer.clear(); answer.add(i); max = count; } else if (max == count) { answer.add(i); } } Collections.sort(answer); StringBuilder sb = new StringBuilder(); for (int n : answer) { sb.append(n); sb.append(" "); } bw.write(sb.toString()); br.close(); bw.close(); } } 이렇게 작성하니까 시간 초과가 나지는 않는데, 어느 테스트 케이스에서 memo 배열에 저장된 값을 사용하는건지 알 수 있을까요?그리고 혹시 강사님은 이 문제를 이것과 다르게 푸셨을까요?? ++ 추가로 배열 대신 HashMap을 사용해도 시간 초과가 납니다... ㅠimport java.io.*; import java.util.*; public class Main { private static int N, M; private static List<List<Integer>> graph; private static boolean[] visited; private static Map<Integer, Integer> map; private static int dfs(int idx) { if (map.get(idx) != null) { return map.get(idx); } visited[idx] = true; int count = 1; for (int next : graph.get(idx)) { if (!visited[next]) { count += dfs(next); } } map.put(idx, count); return count; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); graph = new ArrayList<>(N + 1); for (int i = 0; i <= N; i++) { graph.add(new ArrayList<>()); } for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); graph.get(b).add(a); } int max = -1; List<Integer> answer = new ArrayList<>(); for (int i = 1; i <= N; i++) { visited = new boolean[N + 1]; map = new HashMap<>(); int count = dfs(i); if (max < count) { answer.clear(); answer.add(i); max = count; } else if (max == count) { answer.add(i); } } Collections.sort(answer); StringBuilder sb = new StringBuilder(); for (int n : answer) { sb.append(n); sb.append(" "); } bw.write(sb.toString()); br.close(); bw.close(); } }
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
섹션1 배열 강의 질문드립니다
배열은 참조에는 좋지만 삽입과 삭제는 비효율적이라고 하셨는데자바스크립트 배열은 처음에 크기를 지정하지도 않고, 메모리 할당도 불연속적으로 하니까 예외라는 건가요? 감사합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
시간복잡도 Big-O 표기법에 대해서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요!질문이 2가지 있습니다.[기본]시간복잡도 Time Complexity 강의 @4:20부분에서 1/ "이처럼 입력값 n에 대한 실행시간 함수가 있다면, 최고차항의 계수만을 표기하여 Big-O(n)을 표기할 수 있다."이렇게 설명을 하셨는데, 제가 이해하기로는 계수는 숫자와 문자의 곱에서 '숫자'를 의미하는걸로 알고 있어서요!예를 들면, 3n이라고 한다면 숫자인 3이 계수라고 알고있습니다.그러면 Big-O표기법은 '최고차항의 계수만을 표기'하는게 아니라 '최고차항'을 표기하는걸까요? 2/ @4:27부분에O(n!) > O(2^n) > O(n^2)..이렇게 시간복잡도가 높은것부터 그래프로 보여주실때 '차수가 높은 순서는 다음과 같다'라고 말씀하셨는데제가 이해하기로는 '차수'는 문자가 곱해진 횟수, 즉 n^2면 2차, n^3이면 3차. 이런게 차수인걸로 알고있습니다.그렇다면 n!이 2^n보다 차수가 더 높고, 2^n이 n^2보다 차수가 더 높은걸로 이해하면 될까요? 감사합니다!
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
자바와 파이썬은 상속문법이 서로 원래 달라서 그런건가요?
자바를 배울때는 circle에 부모클래스의 함수인 .set_scale()을 써도 circle을 반환하지 부모객체는 반환을 안했는데.. 저건 파이썬만의 특징인가요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
python 3.11 실습 환경설정?
꼭 pyenv를 설치해야지만 실습이 가능한가요? 그러니까 replit이나 3.9나 3.10이 깔려있는 환경에서는 실습이 안되는거죠??pyenv가 앞서 전 강의시간에 나온 파이썬 가상환경 virtualenv와 같나요? 그러면 설정방식과 해제 방식도 같나요???
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
import sys로 실습하기
print(float(sys.version)<(3.9))print(sys.version_info<(3.9))안되는 이유가 뭘까요?? sys.version sys.version_info가 지저분하게 여러문자열이 뒤에 붙어서 변환이 안되는건가요?
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
저는 자바로 공부중인 학생인데요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.자바로 수업을 따라가기엔 힘든가요?아니면 충분한가요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
int(), float()에 대해서
head가 string이라 가정하면int(head)-> 변환된 int를 리턴float(head)->변환된 head를 리턴case로 비교시 기존 자료형과 변화된 자료형을 비교하여 원래 자료형이 int나 float가 아니면 false 인건가요?그리고 | 연산자가 있으니 if head원래 자료형 == head를 int로 바꾼 즉 int 자료형 | head 원래 자료형== head를 float으로 바꾼 즉 float 자료형 인건가요?
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
다른 재귀문제를 몇몇 개 풀어봤지만 하노이탑은 그냥 형태를 기억해서 푸네요..
하노이탑 문제가 어떻게 재귀의 기본문제일까요.. 다른 재귀문제 많이 풀어봤지만, 하노이탑은 정답 안 본 상태에서 며칠이고 고민해도 못풀었었고 지금도 사실 잘 모르겠네요.그냥 아래 항목들을 외워서 재귀 함수 호출하면 된다고 암기했습니다.n-1만큼 A에서 B로 옮기기가장 큰 원반 A에서 C로 옮기기나머지를 B에서 C로 옮기기 영상으로 보면 코드 한 줄 한 줄 실행되는 과정 보여주시면 "되니까 신기하네"라고 생각은 하지만, 1번 과정 중에 3번도 간헐적으로 일어나고, 3번하다가 1번도 계속 일어나면서 얼기설기 엉켜있어서 이해하기 힘드네요. 다들 대략적인 형태를 기억해서 푸는것일뿐 정확히 탑이 이동하는 절차 순서에 대해서 파악하고 쓰는건 아니겠죠?!
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
강의 내용에 있는걸 주석풀고 print 해보았더니..
datetime.datetime()을 해서 print했더니 왜 작동이 안될까요?
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
iterator 관련 질문입니다.
안녕하세요.iterator관련 해서 간단하게 질문 드립니다.hasNext() 와 next() 함수 모두 다음에 있는 요소에 관한 함수지 않습니까?코드를 작성하다가 문득 든 생각인데 이터레이터가 위치한 인덱스의 다음 인덱스를 뜻한다면 첫번째 원소는 어떻게 다룰 수 있는걸까?라는 의문이 들어서 질문글을 작성하게 되었습니다.1)여기서 다음의 뜻이 이터레이터가 위치한 인덱스를 말하는것인가요?아니면 이터레이터가 위치한 인덱스의 다음 인덱스를 말하는것인가요? 물론 전자여야 모든 뜻이 말이 되고 이해가 가기 때문에 전자겠지만자바 사이트에서 함수 정의를 보면 next라고 적혀 있어서 혹시나 해서 질문드립니다.전자가 맞다면 왜 하필 햇갈리게 next라고 했을까요? 2)그리고 hasNext가 이후에 요소가 있는지를 체크하는 함수라면 이터레이터가 arrayList의 마지막 인덱스에 위치할땐 false값을 리턴해서 마지막번째 원소를 다룰 수 없게 되지 않나요?혹시 arrayList도 마지막 원소에 c의 문자열 처럼 마지막에 null값이 항상 있기 때문에 마지막 원소까지 hasNext함수가 다룰 수 있는건지 궁금합니다. 다음이라는 단어 때문에 간단하던것들이 갑자기 모두 햇갈리네요.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
[그리디 실전 문제] 최솟값을 만드는 괄호 배치 찾기 (백준 1541) - 반례를 못찾겠습니다 ㅠㅠ
안녕하세요!항상 좋은 강의 감사드립니다!덕분에 하루 하루 실력이 느는것이 느껴질 정도로 도움이 많이 되고있습니다! ㅎㅎ다름아니라 문제 36번 에서 같은 원리로 해결한 코드인데 백준에 재출했을 때 2% 에서 오답처리가 되었고,아무리 찾아봐도 잘못된 부분과 반례를 찾을 수 없어서 질문 남기게 되었습니다 ㅠㅠ아래는 제가 만든 코드입니다.항상 감사드립니다 :)import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String N = sc.next(); String[] split = N.split("-"); int result = 0; for (int i = 0; i < split.length; i++) { String[] A = split[i].split("\\+"); int sum = 0; for (int j = 0; j < A.length; j++) { sum += Integer.parseInt(A[j]); } result -= result == 0 ? sum * -1 : sum; } System.out.println(result); } }