public class BOJ_12865 { static int N; static int K; static int[][] merchandise; // 0 : 무게, 1 : 가치 static int[][] dp; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); K = sc.nextInt(); merchandise = new int[N][2]; dp = new int[10000000][N]; for (int i = 0; i < 10000000; i++) { for (int j = 0; j < N; j++) { dp[i][j] = -1; } } for (int i = 0; i < N; i++) { merchandise[i][0] = sc.nextInt(); merchandise[i][1] = sc.nextInt(); } int max = recursion(0, 0); System.out.println(max); } private static int recursion(int index, int weight) { if (weight > K) { return Integer.MIN_VALUE; } if (index == N) { return 0; } if (dp[weight][index] != -1) { return dp[weight][index]; } dp[weight][index] = Math.max(recursion(index + 1, weight), recursion(index + 1, weight + merchandise[index][0]) + merchandise[index][1]); return dp[weight][index]; } 안녕하세요 덕분에 강의 잘 듣고 있는 수강생입니다. 냅색 문제를 풀고 있는데, 최대 가능한 무게의 경우 100 (배낭 물품의 최대 개수) * 100,000(각 물건의 최대 무게) 로 생각보다 생성해줘야하는 배열의 크기가 크더라구요. 그래서 혹시 dp를 1차원 배열로 생성하면 어떻게 되는 지 궁금하여 1차원 배열로 해본 결과, 무게를 고려하지 않고 dp의 무게 갱신을 하게 되어 답이랑은 다르게 나오네요. 혹시 1차원 배열을 시도하려고 할 때 제가 놓치고 있는 부분이 있을까요?감사합니다.
안녕하세요 교수님. 강의 정말 잘 듣고있습니다. 현재 파머완 강의 8장 중간까지 들은 학생입니다. 저는 원래 교수님의 컴퓨터비전 로드맵을 따라갈 생각이었으나, 아직 머신러닝에 대한 기초가 부족하다고 느껴서(어느정도는 알았지만 개념적으로 부족했습니다) 이 강의와 책을 본 후 로드맵을 본격적으로 따라가려고 했습니다. 처음 강의인 CNN 강의에서 선수지식이 '기본적인 머신러닝에 대한 개념 이해' 정도로 작성되어있는데 꼭 나머지 8,9장까지 마무리하고 넘어가야할까요? 아 그리고 로드맵 강의를 수강하면서 앱(?)같은 것도 만들어볼 기회가 있을까요? 감사합니다!
안녕하세요, 좋은 강의 감사합니다. 한국에서 6년차 백엔드 개발 경력이 있고, 호주 취업에 관심이 있어서 알아보고 있던 중 이 강의를 결제하게 되었어요. 요약해서 알려주신 부분은 너무 좋은데, 초급이라 적혀있으나 알고리즘을 풀어보지 않은 저에게는 난이도가 많이 높은 것 같아요. 해당 난이도를 소화하기 이전에 학습하면 좋을 부분이 있을까요?
파이썬 언어 이제 막 땐 코린이예요 올해 6월 쯤에 네이버 부스트캠프 코딩테스트가 있어서 준비중에 있는데 강의 완강한다면 합격권은 될까요? dfs, bfs, 구현, 누적합, 비트마스킹, 완탐, 그래프이론 정도가 범위라고 해요 첫 강때 난이도에 쫄지 말라고 하셔서 안쫄아 보려고는 하는데, 강의하시는 범위에 해당 되는지 궁금하네요 완강하는데 어느정도 걸릴까요? 강의명대로 2주잡고 하면 될까요? 하루에 몇강정도를 추천하시는지 궁금해요 시험까지 대략 4~5달 정도 남았는데, 부스트캠프에서 사용하는 자바스크립트로 개인 플젝 하면서 코테를 공부할지, 코딩테스트에만 확실히 집중해야될지 고민이네요 주변에 비교대상이 없어서 막막해서 여쭤봐요! 마지막으로 양질의 강의 감사합니다 열심히 배워볼게요
안녕하세요 cs지식 강의 듣고 강의력이 너무 좋아서 코테도 신청 하여 이제 막 듣고있습니다. 반도체 장비회사 쪽 근무하고 있고, 이직하려고 회사를 몇개 넣었는데, 서류가 붙는다면 1달정도 이내에 코딩 테스트를 보게 될 것 같아 시간이 촉박 한 상황입니다. 퇴근하고 코테에 CS지식에 시간도 빠듯한 상황인지라... 이런 경우에 좀더 효율적인 코테 공부방법이 무엇인지 궁금합니다. 참고로 코테 강의도 너무 강의 전달력이 참 좋으신 것 같습니다. 이해가 잘되네요..
원본배열 유지하고 새 배열 반환하도록 리팩토링한 GPT 코드입니다. 주석 달아달라니까 주석까지 친절하게 달아주네요ㅋㅋ 세상참 편해졌네요. GPT로 코테보는 사람도 있어서 그거 방지하려고 캠이랑 실시간으로 하는 경우도 있더라구요... function mergeSort(arr, leftIndex, rightIndex) { // 기저 사례: 하나의 요소만 있는 경우, 그 요소를 배열로 반환 if (leftIndex >= rightIndex) { return [arr[leftIndex]] } // 중간 지점 계산 let midIndex = parseInt((leftIndex + rightIndex) / 2) // 배열을 두 부분으로 나누어 각각을 재귀적으로 정렬 let leftArr = mergeSort(arr, leftIndex, midIndex) let rightArr = mergeSort(arr, midIndex + 1, rightIndex) // 병합된 배열 반환 return merge(leftArr, rightArr) } function merge(leftArr, rightArr) { let result = []; // 병합된 요소를 저장할 배열 let leftIndex = 0, rightIndex = 0; // 각 배열의 인덱스 // 두 배열 중 하나가 완전히 순회될 때까지 반복 while (leftIndex < leftArr.length && rightIndex < rightArr.length) { // leftArr의 현재 요소와 rightArr의 현재 요소를 비교 if (leftArr[leftIndex] < rightArr[rightIndex]) { // leftArr의 요소가 더 작은 경우, 결과 배열에 추가하고 leftArr의 인덱스 증가 result.push(leftArr[leftIndex]); leftIndex++; } else { // rightArr의 요소가 더 작거나 같은 경우, 결과 배열에 추가하고 rightArr의 인덱스 증가 result.push(rightArr[rightIndex]); rightIndex++; } } // 남은 요소들을 결과 배열에 추가 // leftArr 또는 rightArr 중 하나가 이미 완전히 순회된 후, 나머지 배열의 남은 요소들을 결과 배열에 추가 return result.concat(leftArr.slice(leftIndex)).concat(rightArr.slice(rightIndex)); }
안녕하세요! 교수님 강의를 듣고 있는 수강생입니다 ! 강의를 복습할 때 개인 블로그에 수업 내용을 정리하면서 게시를 하고 싶은데요 ! 강의 내용에 포함되어있는 이미지를 사용해서 간단하게 요약해서 게시를 하고 싶은데 저작권법에 걸리는 지 여쭤보고 싶어서 글을 작성합니다 ! 개인 블로그에 강의 자료(이미지 등)을 사용해서 복습 용도로 게시를 해도 될까요 ??
안녕하세요! 먼저 좋은 강의 해주셔서 감사드립니다. 저는 코테를 준비하며 답지를 보지 않고 정답이 나올때까지 충분히 고민하며 풀었습니다. 그러다보니 한 문제를 푸는데 시간도 너무 많이 소요되었고 이제는 알고리즘, 자료구조 없이 문제를 풀기가 불가능한거 같습니다..(실버 2정도입니다..) 그래서 최근 강의를 듣기 시작하였고, 강의를 듣기 전 먼저 문제를 풀어보면 답은 맞지만 코드 효율성이 떨어져 시간 초과 혹은 메모리 초과가 자주 발생합니다. 제가 익숙치 않아서 그런걸까요?? 논리를 이해하고 코드를 외운 후 많은 문제를 풀면 개선될 여지가 있는건지 궁급합니다. 또한 추천해주실만한 학습방법이 있을까요? 항상 좋은 강의해주셔서 감사드립니다.
안녕하세요. 선생님 덕분에 멋진 강의를 듣고 있는 학생입니다.이제 유형 1을 다 수강했는데, graph를 초기화할 때 보통 N의 개수가 적으면 불리언 2차원 배열로 선언하고, N의 개수가 많으면 빈리스트로 구성된 2차원 리스트로 선언하는데요.그냥 모든 문제에 빈리스트로 구성된 2차원 배열을 선언하지 않는 이유가 N의 개수가 적으면 배열로 선언하고 조회하는 게 더 빠르기 때문인지 여쭤봐도 될까요?
분류(Classification) 성능 평가지표 개요와 정확도(Accuracy) 소개 에서 MNIST를 모두 0으로 예측하는 코드에서 fakepred와 y_test를 비교하는데요 이때 type은 같은데 하나는 1차원 배열이고 또 다른 하나는 column을 1로 가진 2차원 배열인데 이렇게 shape이 달라도 accuracy_score를 통해 비교할 수 있나요?
이번 주 일요일에 코테를 봅니다ㅜㅜ 특정 알고리즘이 아닌 구현 문제는 어떤 식으로 공부하는 게 좋을까요? 시뮬레이션 문제라든가... 선생님 강의를 보면 의식의 흐름대로 따라갈 때에는 일리가 있고, 정답으로 가는 길이긴 한데, 막상 문제에 진입하게 되면 어떻게 그 규칙을 발견해야할지 모르겠습니다.. 특히 DP의 점화식을 세우는 것. 어떻게 연습해야할까요 ㅜㅜ
176~177 사이의 2의 제곱수로 나누어지는 약수를 모두 찾는 문제입니다. 176은 16으로 나누어 떨어지고, 177은 1로 나누어 떨어지니 16+1이 답이라고 하셨는데... 저는 이 논리 전개 자체가 이해가 되지 않습니다. 어떻게 16 + 1이 나오는지 알려주시면 감사하겠습니다ㅜ