1. 현재 학습 진도 41강 4-8 DP 부분 수강 중입니다 2. 어려움을 겪는 부분 첨부해주신 Java 코드로 구현시 fib(100) 의 결과 값이 long 범위에 초과 되어 오버플로우가 발생하는 것 같습니다. 3. 시도해보신 내용 BigInteger 를 도입하여 해결하긴 했지만, 더 나은 방법이 있다면 알려주시면 감사드리겠습니다. import java.math.BigInteger; import java.util.HashMap; import java.util.Map; public class FiboDynamicProgramming { private static Map<Integer, BigInteger> memo = new HashMap<>(); static { memo.put(1, BigInteger.ONE); memo.put(2, BigInteger.ONE); } // 1. 메모에 값이 있으면 반환 // 2. 없으면 피보나치 공식 적용 및 메모이제이징 private static BigInteger fiboDynamic(int n, Map<Integer, BigInteger> fiboMemo) { if (fiboMemo.containsKey(n)) { return fiboMemo.get(n); } BigInteger nthFibo = fiboDynamic(n - 1, fiboMemo).add(fiboDynamic(n - 2, fiboMemo)) ; fiboMemo.put(n, nthFibo); return nthFibo; } public static void main(String[] args) { System.out.println(fiboDynamic(100, memo)); } }
안녕하세요. [Min Cost Climbing stairs]에서 base code 설정시에 if n==0 or n==1: return 0 이 아닌 if n==0: return cost[0] if n==1: return cost[1] 로 설정해야 되는 것이 아닌지 문의드립니다. 인덱스 1에 있다고 하더라도 1을 밟아야 꼭대기에 도달할 수 있는 것이니 해당 인덱스의 cost 값을 return 해야하지 않는지에 대해 의문이 듭니다.
package section06_Sorting_Searching.no06_fail; import java.util.*; public class Main { public int[] solution(int n, int[] arr) { int [] answer = new int[2]; for (int i = 0; i < n-1; i++) { if (arr[i] > arr[i+1] && answer[0] == 0) { // 첫번째 바뀐 지점 answer[0] = i+1; } else if (arr[i] > arr[i+1] && answer[0] != 0) { // 두번째 바뀐 지점 answer[1] = i+2; break; } if (i == n-2) answer[1] = answer[0] + 1; // 서로 인접한 상태에서 바꼈을때 } return answer; } public static void main(String[] args) { Main m = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (int x : m.solution(n, arr)) System.out.print(x + " "); } } 코드를 위와 같이 작성했는데 틀렸다고만 나와서 왜 틀렸는지 아무리 생각해봐도 잘 모르겠어서 질문합니다.
안녕하세용 이 문제를 보고 시간복잡도를 처음 생각했을 때 1만 x 1만이라고 생각했는데 문제에서 인접한 간선(단방향)의 수를 1만이라고 제한을 뒀고 그래서 시간복잡도가 달라질 것이라고 잠깐 생각했지만 아래와 같은 case가 있는 경우 n^2과 같이 될 수 있어서 결국은 큰돌님이 말한 시간복잡도와 같게 되는 군요!! 맞나요?? '1번 컴퓨터는 2번컴퓨터를 신뢰, 2번 컴퓨터는 3번 컴퓨터를 신뢰, ...., n-1번 컴퓨터는 n번 컴퓨터를 신뢰, n번 컴퓨터는 1번 컴퓨터를 신뢰'
안녕하세요, 강사님. 현재 자바 중급 2편을 이번 주 내로 수강 완료할 예정인 수강생입니다. 인프런에 올라와 있는 ‘김영한의 자바 공부법 로드맵’에서는 자바 고급 1, 고급 2를 뒤로 미루고 스프링 강의로 먼저 넘어가는 흐름을 추천해 주셨는데, 영상으로 올려주신 ‘김영한의 실전 자바 로드맵’에서는 자바 고급 1은 6강까지, 자바 고급 2는 전부 수강한 뒤 스프링으로 넘어가는 것이 최적이라고 말씀해 주셔서 두 로드맵 중 어떤 흐름을 따르는 것이 좋을지 고민되어 질문드립니다. 저의 목표는 다음과 같습니다. 올해 안에 「스프링 핵심 원리 - 기본편」까지 들어가는 것 스프링을 활용해서 직접 무언가를 개발해 보는 것 다만, 스프링을 빨리 배우고 싶으면서도 자바 기본기와 객체 지향에 대한 공부를 소홀히 하고 싶지는 않아서 인프런 로드맵처럼 자바 고급 1, 2를 건너뛰고 스프링으로 넘어가도 괜찮은 선택인지 확신이 서지 않습니다. 제 상황에서는 어느 로드맵 흐름을 따르는 것이 더 좋을지,자바 고급 1, 2를 어느 정도까지 수강한 뒤 스프링으로 넘어가는 것이 좋을지 추천해 주실 수 있을까요?
파이썬으로 제작된 강의가 두개가 있는데 비슷하면서 차이가 있더라구요 - 백트래킹 / 완전탐색 - 동적계획법 (DP) - 위상정렬 - 플로이드-와샬 - 힙(Heap) - 고급 시뮬레이션 프로젝트 - 파스칼 응용 / 순열 / 조합 실습 대략 보기로는 최신강의에서 이 내용이 빠져있는것같은데 두 강의 모두 수강해야하나요?
'큰돌의 사과나무' 문제에서 "큰돌은 처음에는 1번 사과나무 아래에 위치해 있다. "라는 조건이 적혀있습니다. int main() { // 생략 // 두 가지 초기 상태(1번 나무에 시작, 2번 나무에 시작) 중 최대 값 출력 cout << max(go(0, 1, m - 1), go(0, 0, m)) << '\n'; // 생략 } 그렇기에 cout << go(0, 0, m) << '\n'; 만 적는게 적절하지 않나? 라는 생각이 들었는데 제가 잘못 생각한걸까요? (0 -> 1번 나무, 1 -> 2번 나무)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해당 문제를 완탐이 아닌 BFS로 풀면 안 되는 건가요? 만약 안된다면 BFS로 풀었을 때 어떤 문제점이 있는지 알고 싶습니다.
음 강의를 여러번 봐도 이해가 잘안되서 문의드립니다. 이해가 잘 안되는 점 홀짝을 한 이유? 홀일떄는 홀끼리, 짝일때는 짝끼리 가능하다고 하셨는데 왜 그런지 이해가 잘안됩니다. 짝[0], 홀[1] 이동생, 수빈을 나타내는건가요? 아니면 그냥 공간복잡도떄문에 이렇게 비교하는건가용??
안녕하세요 선생님! 선생님의 해설 코드를 본 뒤, 제 방식대로 코드를 구현해봤어요. struct 없이 구현했고, vector를 사용했다는 점이 가장 큰 차이점이에요. https://www.acmicpc.net/source/share/76924786b7cb49bd8214270312660074 다만 해당 코드가 계속 '틀렸습니다'가 뜨는데 그 원인을 명확하게 모르겠어요. 혹시 도와주실 수 있으실까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님. 강의 교안 보면서 c++ 공부잘하고 있습니다. 다름이 아니고 교안 소스코드 관련 문의가 있습니다. if 조건문 작성시에 한줄로 작성하는 이유가 혹시 따로 있을까요? 교안 코드 보면서 작성할때 보기가 다소 불편해서 문의 드립니다. 혹시 코테나 라이브 코딩시에 코드 작성 시에 신경써야 할 코딩 스타일 같은 것들이 있을까요?