묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
바이너리 검색
질문이 있습니다. A={ 3 , 4 ,6, 1, 10, 9 } 가 있으면 binary search 를 실행할 수 있나요? 아니면 없나요?저는 unsorted 이므로 검색이 안된다 했는데, 학교에서는 할 수 있는데 틀린 답을 가질거라고 하더라구요. 이거에 대해서 개념이나 정의를 이용해서 반박할 수 있을까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1강 4번 예시 답안에 대한 질문
문제 4. 숫자야구 ( # 2503 )A 는 3 자리 숫자로 된 정답을 하나 정합니다.B 는 3 자리 숫자를 제시해서 A 가 생각하고 있는 정답을 맞히려고 합니다.B 가 말한 숫자가 정답에 포함되어 있다면 1 Ball 입니다.B 가 말한 숫자가 정답에 포함되어 있고, 자리도 동일하다면 1 Strike 입니다.다른 숫자로 이루어진 세 자리수Strike 와 Ball 의 결과를 보고, 가능한 숫자를 계산하는 프로그램을 작성하세요.4123 1 1 356 1 0 327 2 0 489 0 1 2백준 사이트 들어가보니 가능한 숫자 324,328 이렇게 두 개이어서 결괏값이 2라고 나와있는데,329를 생각하고 있어도 위와 같은 s,b 가 가능한 것이 아닌가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
프로그래머스에서는 어떤 문제를 풀어야 하나요
레벨1은 그냥 풀겠는데 레벨2부터는 난이도 책정이 백준에 비해 넓은 것 같더라 구요 그래서 정답률 몇 짜리 정도 되는 걸 풀어야 하는지 알 수 있을까요
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
지역 내부 클래스 질문드립니다.
"메서드 호출 이후에도 사용해야 하는 경우가 있을 수 있으므로 지역 내부 클래스에서 사용하는 메서드의 지역 변수나 매개 변수는 final로 선언됨"라고 말씀하셨는데 final로 선언되면 저장되는 영역이 달라지나요? 왜 final을 사용하는지 궁금해서 여쭤봅니다
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[3강 누적합>이모스1법> 백준 17611] 런타임에러 질문드립니다!
import sys sys.stdin = open('BackJoon/3강_누적합/5_17611.txt','r') input = sys.stdin.readline n = int(input()) vertex = [list(map(int, input().split())) for _ in range(n)] ######## (x_min, y_min) -> (0, 0)으로 이동 x_min, x_max = 500000, -500000 y_min, y_max = 500000, -500000 for x,y in vertex: x_min = min(x, x_min) x_max = max(x, x_max) y_min = min(y, y_min) y_max = max(y, y_max) x_diff = 0 - x_min y_diff = 0 - y_min for i in range(n): vertex[i][0] = vertex[i][0] + x_diff vertex[i][1] = vertex[i][1] + y_diff ##### 수평선 조사 (강의에서와 같이 왼쪽으로 돌려서 봄) vertex_x_incre = sorted(vertex, key = lambda x: (x[0], x[1])) # y_range = y_max-y_min+1 x_range = x_max-x_min+1 x_sum_list = [0] * (y_range+1) # x축 방향으로 [1, 0, 0, ..., -1] 더함 for i in range(0,n,2): # 선분은 2개의 꼭지점으로 이루어짐 v1 = vertex_x_incre[i] v2 = vertex_x_incre[i+1] if v1[0] != v2[0]: # 디버깅 print('x point does not match!!')#만약 선분이 직선이 아니라면(혹은 sort가 잘못됨) break if v1[1] >= v2[1]: print('y point does not align!!')#sort가 잘못됨 print('v1:', v1) print('v2:', v2) break x_sum_list[v1[1]] += 1 x_sum_list[v2[1]] -= 1 x_sum_list = x_sum_list[:-1] #범위밖의 맨 마지막 -1 자리 버림 prefix = [0]*(y_range+1) for i in range(y_range): prefix[i+1] = prefix[i] + x_sum_list[i] prefix = prefix[1:] h = max(prefix) ##### y축 방향으로 조사 (수직선 조사) vertex_y_incre = sorted(vertex, key = lambda x: (-x[1], x[0])) y_sum_list = [0] * (x_range+1) # y축 방향으로 [1, 0, 0, ..., -1] 더함 for i in range(0,n,2): v1 = vertex_y_incre[i] v2 = vertex_y_incre[i+1] if v1[1] != v2[1]: print('y point does not match!!') break if v1[0] >= v2[0]: print('x point does not align!!') print('v1:', v1) print('v2:', v2) break y_sum_list[v1[0]] += 1 y_sum_list[v2[0]] -= 1 y_sum_list = y_sum_list[:-1] prefix = [0]*(x_range+1) for i in range(x_range): prefix[i+1] = prefix[i] + y_sum_list[i] prefix = prefix[1:] v= max(prefix) print(max(h,v))
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
let current = this.head 질문 있습니다!
this.head 대신 let current = this.head 처럼 current변수에 할당하여 사용하는 이유가 무엇일까요?ㅠ변수에 할당하여 사용하지 않았을 때 값을 보니 값이 다르게 나와 문의드립니다. li.add(3)이 실행될때 첫번째 노드가 사라짐 정상출력
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
큐 구현하기 질문드립니다
public String deQueue() { if(isEmpty()){ System.out.println("Queue is Empty"); return null; } String data = front.getData(); front = front.next; if( front == null ){ // 마지막 항목 rear = null; } return data; }강사님께서 올려주신 코드인데 처음에는 head가 null이니까 isEmpty가 true라서 return null이 되는데enQueue 실행하고 deQueue를 2번 실행하면 head가 null이 아니라서 isEmpty가 false가 되면서NullPointerException이 발생합니다. 어떻게 수정하면 좋을까요?
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준11505, 교재 73번
#include <iostream> #include <vector> #include <cmath> using namespace std; static vector<long> tree; static int n, m, k,mod = 1000000007; void tree_set(int a); void change_val(int index, long val); long gugan(int s, int e); int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m >> k; int q = n; int l = 0; while (q != 0) { q = q / 2; l++; } int tree_size = int(pow(2, l+1)); int left_index = pow(2, l); tree.resize(tree_size); fill(tree.begin(), tree.end(), 1); for (int i = left_index; i < n+left_index; i++) { cin >> tree[i]; } tree_set(tree_size-1); for (int i = 0; i < m + k; i++) { long a, s, e; cin >> a >> s >> e; if (a == 1) { change_val(s + left_index - 1, e); } else if (a == 2) { long start = s + left_index - 1; long end = e + left_index - 1; long result = gugan(start, end); cout<<result<<'\n'; } } } long gugan(int s, int e) { long part_sum = 1; while (s <= e) { if (s % 2 == 1) { part_sum *= tree[s]%mod; } if (e % 2 == 0) { part_sum *= tree[e]%mod; } s = (s + 1) / 2; e = (e - 1) / 2; } return part_sum; } void change_val(int index, long val) { tree[index] = val; while (index > 1) { index = index / 2; tree[index] = tree[index*2]%mod*tree[index*2+1]%mod; } } void tree_set(int a) { while (a != 1) { tree[a / 2] *= tree[a]%mod; a--; } } 위의 방법으로 코드를짜서 제출했더니 출력초과가 발생합니다. 왜 이런오류가 발생하는지 모르겠습니다..
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
자료 자체와 정렬된 인덱스 분리 (인덱스 정렬) - 인덱스 범위 코드에 버그가 있어서 질문 드립니다.
강사님 다름이 아니라 인덱스 검색의 SearchByIndexAgeRange에서 작은 버그가 있어서 해당 내용 공유 드립니다.검색 조건을 리스트에서 작은 값의 범위로 지정을 했을 시 아래 해당 코드에서 length 가 최소 값이 1이 되므로 항상 리스트의 작은 값이 출력이 되는 버그가 있습니다.동작에 대한 예시 화면입니다. 따라서 length 를 구한 다음 리스트에서 해당 USERDATA의 age 값을 max 값과 비교를 해서 max 값보다 작을 경우에만 해당 코드들이 동작하게 되어야 하는 것이 맞는 것 같습니다. 다음과 같이 코드 수정 시 동작 화면입니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
__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 는 안써도 되는건가요? ㅠㅠ