묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
__del__ 작동 여부
강의와 동일한 코드를 실행하였는데 강의에서의 맨 마지막 코드 실행 결과는 True만 출력된 것에 비해 직접 해본 결과Truecar deletedcar deleted가 출력되었습니다따로 del tesla를 하지 않아도 자동으로 변수가 del된 것 같은데 혹시 어떤 이유로 이러한 차이가 발생한 것일까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
시간복잡도 관련 질문입니다.
위 코드에서 for문이 n번 만큼 반복되고 그 안에 있는 while문이 도는 횟수의 총 합이 n번이라고 하셨는데 그렇다면 위 코드의 시간복잡도는 [for문 시간복잡도: o(n)] * [while문의 시간 복잡도 : {o(n-1) + o(n-3) + ... o(1)} ]= o(상수 * n) 이렇게 이해하면 되는 걸까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
climbing stairs를 top-down 방식으로 풀면 시간초과가 뜹니다
tabulation 방식의 Bottom-up은 재귀를 호출하지 않기 때문에 당연히 테케 통과하구요강의를 들었을때도 강사님은 피보나치 코드 그대로 사용하셔서 저도 그대로 제출했는데 시간 초과가 뜹니다... 원래의 코드는 아래와 같구요def climbStairs(self, n): memo = {} if n == 1 or n == 2: return n if n not in memo: memo[n] = self.climbStairs(n-1) + self.climbStairs(n-2) return memo[n]discuss를 참고해서 수정한 코드는 테케를 통과했는데 아래와 같습니다class Solution(object): def climbStairs(self, n): memo = {} return self.dp(n, memo) def dp(self, n, memo): # base cases if n == 1 or n == 2: return n if n in memo: return memo[n] memo[n] = self.dp(n-1, memo) + self.dp(n-2, memo) return memo[n]제가 봤을 때는 두 코드의 로직에 대한 차이점은 없어보입니다만 왜 아래의 코드는 시간초과가 나지 않는거죠??
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
강의자료 관련
강의자료 인쇄하려고하는데, 검정색 배경화면으로 나오는데 이거 인쇄용으로는 없나요? 너무 잉크 많이 쓰게 되는데 ..
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
수업자료
노트부분에 있다고 하셨는데 해당강의 재생해서 노트 누르니까 아무것도 없는데노트부분이 그림에서 표시한 노트가 아닌 건가요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 24479 문제 시간 초과 질문 드려요
안녕하세요 백준에서 테스트 결과 시간 초과 오류가 납니다 . 확인 한번 가능할까요?import java.io.*; import java.util.*; public class Main { static final int MAX = 100000 + 10; static int N, M, R; static ArrayList<Integer>[] graph; static boolean[] visited; static int[] answer; static int order; public static void dfs(int idx) { visited[idx] = true; answer[idx] = order; order++; for (int i = 0; i < graph[idx].size(); i++) { int next = graph[idx].get(i); if (visited[next] == false) dfs(next); } } 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()); R = Integer.parseInt(st.nextToken()); graph = new ArrayList[MAX]; for (int i = 1; i <= N; i++) { graph[i] = new ArrayList<>(); visited = new boolean[MAX]; answer = new int[MAX]; order = 1; } for (int i = 0; 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); } for (int i = 1; i <= N; i++) { Collections.sort(graph[i]); } dfs(R); for (int i = 1; i <= N; i++) { bw.write(String.valueOf(answer[i])); bw.newLine(); } bw.close(); br.close(); } }
-
해결됨코딩테스트 [ ALL IN ONE ]
다익스트라질문
[코테 적용] 👉 [Network Delay Time] (후반부) 에서요.파란색 박스 제외하고 빨간색 박스에서만 pq에서 정렬일어나는거 맞나요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
다익스트라 강의 관련 질문이 있습니다.
설명해주신 다익스트라 알고리즘 코드를 보면32~33번째 줄에서 아래 조건이 만족하면 무조건 우선순위 큐에 nxt 정점이 추가되는데요.if dist[node] + weight < dist[nxt] 이런 경우 nxt 까지 도달할 수 있는 거리 정보가 업데이트 될 때마다, 우선순위 큐에 nxt 노드가 중복으로 삽입될 수 있는 것 같은데요 질문 1.visit 여부를 확인하는 방식 등으로 우선 순위 큐에 중복으로 넣는 코드를 제거할 수 있을 것 같은데, visit 배열이 빠진 이유가 있나요? 질문 2.그리고 우선순위큐에 중복으로 노드가 존재하게되어도 동작이나 성능 측면에서 문제가 없을지 궁금합니다
-
해결됨코딩테스트 [ ALL IN ONE ]
사용하고 계신 폰트 이름 알 수 있을까요?
vs코드 상에서 제가 쓰고 있는 기본 폰트는 l하고 1 이 헷갈리게 입력되어서 폰트를 바꾸고자 합니다혹시 강사님께서 사용하고 계신 폰트 이름을 알 수 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
파이썬에서의 재귀
글에 두서가 없어도 양해 바랍니다 이 수업 수강 이전에 코딩 문제를 풀 때 파이썬으로 재귀함수를 사용했던 적이 있습니다. 그때 알게 된것이 파이썬의 재귀함수에는 기본적으로 깊이의 제한이 있다는 것입니다. sys.recursionlimit()으로 확인해보니 재귀호출을 1000이상 못하도록 값이 제한되어 있고 이 값을 늘려서 사용하는것은 별로 추천되는 방법이 아닌걸로 알고 있습니다. C언어 사용할때에는 속도면에서 제한도 없고 파이썬보다 속도도 월등하다보니 재귀를 자주 사용했었는데 파이썬에서 재귀함수로 풀어야 하는 경우가 있을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
연결리스트 -1 번 강의에서 질문입니다!
class LinkedList(object):선언한 뒤에linkedlist = LinkedList()이렇게 선언을 하는데 object 는 안써도 되는건가요? ㅠㅠ
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유 요청했는데 확인부탁드립니다.
hth815@g.kmou.ac.kr 으로 네이버폼에 작성했는데 아직 공유가 안된 것 같아서 확인부탁드립니다..!
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
A* 알고리즘에 대해 질문있습니다!
이 강의를 보고, 직접 게임에 적용해보고 싶어서 다시 강의를 수강하며 공부 중인 학생입니다.맵을 만들다보면, 강의처럼 한개의 plane이 아닌 여러개의 plane 또는 오브젝트들이 바닥에 놓여질 텐데 grid를 어떻게 나눠야하는지에 대한 질문입니다!처음에는 2차원 배열로 두고, 그리드를 xOffset,yOffest에 의해 row와 col을 증가시키는 방식을 사용했습니다. 하지만, 코드를 수정하고 생각하는 과정에서 머리가 꼬여버렸습니다ㅜㅜ..두번째로는 하나의 큰 plane을 아래에 두고, 다양한 사이즈와 모양의 plane을 두는 방식을 생각하는 중입니다. 제 주변에 게임 개발자가 없어 이렇게 질문 글을 올립니다. 혹시, 실제 게임 개발시에 a* 알고리즘을 사용한다면 어떤 방식으로 그리드를 나누는지 알 수 있을까요? 알려주신다면 정말 감사합니다!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 실행시 틀립니다.
안녕하세요 강사님. 문제를 풀고 백준에 제출했을 때 계속 오답으로 나와 질문 드립니다..제가 봤을 때 강사님 코드랑 거의 비슷하게 수정까지 한 것 같은데.. 어떤 부분이 잘못되었는지 확인 한번 부탁드립니다.import java.io.*; import java.util.StringTokenizer; public class Main { final static int MAX = 50 + 10; static boolean map[][]; static boolean visited[][]; /* static int dirY[] = {1, 1, 1, 0, 0, -1, -1, -1}; static int dirX[] = {-1, 0, 1, -1, 1, -1, 0, 1};*/ static int dirY[] = {-1, -1, 0, 1, 1, -1, 0, -1}; static int dirX[] = {0, 1, 1, -1, 0, -1, -1, -1}; static int N, M; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); while (true) { StringTokenizer st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); // 너비 x N = Integer.parseInt(st.nextToken()); // 높이 y if (N == 0 && M == 0) break; map = new boolean[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map 정보 반영 for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine()); for (int j = 1; j <= M; j++) { map[j][i] = Integer.parseInt(st.nextToken()) == 1; } } // 2. dfs int result = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (map[i][j] && !visited[i][j]) { dfs(i, j); result++; } } } // 3. 출력 bw.write(String.valueOf(result)); bw.newLine(); } bw.close(); bw.close(); } private static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 8; i++) { int newY = dirY[i] + y; int newX = dirX[i] + x; if (map[newY][newX] && !visited[newY][newX]) { dfs(newY, newX); } } } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 14분쯤 문제 2번 14232번 출력초과...
자꾸 출력초과가 나요..vscode에서 돌려보면 맞는 출력값이 나오는데왜 백준에서는 출력초과가 나는지 모르겠어요 ...강의에 있는 코드 참고해서 한건데 왜 안되는지 모르겠어요 ㅠ........ n = int(input()) jewel = [] for i in range(1,int(n**0.5)+1): if i >2 : if n%i == 0: jewel.append(i) jewel.append(n//i) jewel.sort() print(len(jewel)) print(' '.join(map(str,jewel)))
-
미해결Do it! 알고리즘 코딩테스트 with C++
백주 1456번
for (int i = 2; i <= 10000000; i++) { if (num[i] != 0) { long long temp = num[i]; while ((double)num[i] <= (double)B/(double)temp && (double)num[i] >= (double)A / (double)temp) { count++; temp = temp * num[i]; } } }풀이와 다르게 while 문에서 min값까지 판단하게되면 왜 답이 달라지는건지 모르겠습니다.어떤 값을 count 못하게 되는건지 모르겠습니다
-
해결됨Do it! 알고리즘 코딩테스트 with C++
백준 1325, 교재 47번 문제 질문입니다.
교재에서는 bfs로 구현했는데 저는 dfs로 구현해봤습니다.그랬더니 시간초과가 발생했네요. 제가 작성한 코드가 올바른답이긴하지만 시간초과가 발생하는건지, 아니면 그냥 틀린건지 궁금합니다. 또한 올바른답 이맞다면 왜 시간초과가 발생하는지(시간복잡도 차이가 왜 크게 나는지)도 궁금합니다. #include <iostream>#include <vector>#include <queue>using namespace std;int maxdepth=-1;vector<vector<int>> a;vector<bool> visited;void dfs(int k, int depth);int main() {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);int n,m;cin >> n >> m;a.resize(n + 1);visited = vector<bool>(n + 1, false);for (int i = 0; i < m; i++) {int s,e;cin >> s >> e;a[e].push_back(s);}vector<int> result(n + 1, 0);for (int i = 1; i <= n; i++) {dfs(i, 0);result[i] = maxdepth;maxdepth = -1;fill(visited.begin(), visited.end(), false);}int realmax = -1;for (int i = 1; i <= n; i++) {if (result[i] > realmax)realmax = result[i];}for (int i = 1; i <= n; i++) {if (realmax==result[i])cout<<i<<' ';}}void dfs(int k, int depth) {if (maxdepth < depth)maxdepth = depth;visited[k] = true;for (int i : a[k]) {if (!visited[i]) {dfs(i, depth + 1);}}visited[k] = false;}
-
해결됨코딩테스트 [ ALL IN ONE ]
LCA 문제 관련해서 질문이 있습니당
꼭 visited 배열에 값을 넣거나 혹은 값을 print 하는 것이 아니고 이번 LCA 문제처럼 값을 return 해주는 것도 트리를 순회하다가 방문 처리를 했다고 이해해도 될까요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
배열 출력
만약 int []A = { 1, 3, 9, 4 } 가 있을때,A={ 1, 3, 9 ,4 } 를 출력하고 싶으면 어떻게 해야 출력할 수 있나요? 혹은 for 중첩문의 반복 조건을 통해 선택정렬을 해서( 1, 9) 와 ( 3, 4 ) 에 해당하는 것만 출력하고 싶을때는 어떻게 해야 출력할 수 있나요? 그리고 그건 어디에서 배울 수 있나요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
질문
수업들어보니 자바스크립트의 let 이 자바의 int 같은데, 만약 int min = i ; 선언하고 아래 if ( arr[j] < arr[min]) {min = j ;}라고 하셨는데, 그러면 변수 min 에는 j 값이 저장 되기는 하지만 int 는 지역 변수라 if 문 안에서 저장된 int min 의 값이 if 문 밖으로 나가서는 for 문을 실행하여 다시 j 가 하나 더해져서 반복 실행 되었을때 min 의 값은 다시 i 로 초기화 되는건가요? 아니면 j 로 바뀐건가요 ? -제가 아는 지역 변수에 대한 설명입니다 지역 변수는 선언된 함수나 메소드 내에서만 접근이 가능하고, 해당 함수나 메소드의 실행이 끝나면 그 범위를 벗어나서 접근할 수 없습니다.