묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
숫자의 합 구하기
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); String sNum = sc.next(); char[] cNum = sNum.toCharArray(); int sum = 0; for(int i=0; i<cNum.length; i++){ sum += cNum[i] - '0'; } System.out.println(sum); } }이 코드에서 int N = sc.nextInt(); 이렇게 한 이유가 문제 예제 이유 5, 54321 에서 5를 입력했기때문에 사용한 건가요??
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
숫자야구 문제 질문
숫자야구 문제 코드 부분에서약간 오류가 있는 것 같아서 질문드립니다.number, strike, ball에 각각 힌트를 분배할 때hint[0]~[2]가 아닌 arr[0]~[2]를 담으면서,arr[1]이 strike, arr[2]가 ball이 맞는 것 같은데영상에 나오는 코드를 다음과 같이 고치면 될까요?for arr in hint: number = arr[0] strike = arr[1] ball = arr[2]
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
이상한게 햇갈리는데요.....
저번 수업도 그렇고...반복문 작성할 때 아 이거는 i<N인가? M인가? 이게 햇갈리는데, 뭐 좋은 방법 없을까요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
혹시 구현문제의 대한 강의는 올라오지 않을까요?
혹시 구현문제의 대한 강의는 올라오지 않을까요?다음 예정된 강의는 어떤 종류의 알고리즘인지 궁금합니다.
-
해결됨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 자료형 인건가요?