맞은 코드: http://boj.kr/ed84ee795122447db8c315de4b963c10 틀린 코드 (시간 초과) : http://boj.kr/fb273c695c8844afb5f3d72ff539970e 안녕하세요 강사님 :) 해당 문제에서 시간 초과가 계속 나서 이것저것 고쳐보다가 결국 정답을 받긴 했는데.. 정답 코드와 틀린 코드가 물론 다른 코드이지만, 맞고 틀리고에 어떤 영향을 준 것인지 이해가 잘 되지 않아서 질문드립니다. 두 코드의 차이점은 간단하게 tracing을 위한 코드인 while문에서의 차이입니다. 맞은 코드는 while문을 첫 번째 정답인 dp[n]의 최솟값만큼 반복합니다. int temp = n; int repeat = dp[n]; while(repeat--) { cout << temp << ' '; temp = prev_[temp]; } cout << 1 << '\n'; 틀린 코드는 while문(tracing)을 1이 나올 때까지 반복합니다. int temp = n; while(1) { cout << temp << ' '; temp = prev_[temp]; if(temp == 1) break; } cout << 1 << '\n'; 틀린 코드는 98~99%쯤 시간 초과가 나는데 혹시 이유가 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 강의 잘듣고 있습니다. 3-E 뮤탈리스크 문제 관련해서 질문이 있는데요. 풀이강의 듣기전에는 저런식으로 재귀함수를 생각했는데요. 데미지를 계산하는 함수를 만들고 그 안에 데미지 9,3,1에 대해서 순열을 계산해서 나온 6개에 대한 재귀함수를 각각 작성해서 끊임없이 내부에서 돌다가, SCV 3개의 피가 모두 0이하가 되면 return 해서 빠져나오는걸 생각했습니다. 뭐 보시다싶이...모든 케이스 다 틀리게 나오고 cnt도 1000이상씩 증가하는거보면 완전히 로직도 이상한것 같습니다만 디버깅 돌려봐도 워낙 복잡해서 그런지... 어디서 잘못된거지 정확히 이해가 안가서요. 혹시 로직이 어떤게 잘못된거지 봐주실수 있나요? 아니면 아예 접근법 자체가 완전히 틀려서 안되는건지 궁금합니다..... #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <climits> using namespace std; int cnt = 0; int ret = INT_MAX; int n,aa,bb,cc; void attack(int a, int b, int c) { cnt++; if (a <= 0 && b <= 0 && c <= 0) { ret = ret < cnt ? ret : cnt; //cout << "cnt : " << cnt << " a : " << a << " b : " << b << " c : " << c<<endl; cnt--; return; } attack(a - 9, b - 3, c - 1); attack(a - 9, b - 1, c - 3); attack(a - 3, b - 9, c - 1); attack(a - 3, b - 1, c - 9); attack(a - 1, b - 3, c - 9); attack(a - 1, b - 9, c - 3); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> aa >> bb >> cc; attack(aa, bb, cc); cout << ret << '\n'; }
안녕하세요 선생님의 코드를 보면서 이해가 안가는 부분이 있습니다. 영상에서 64~66번째 줄에서 ch[i][j]=0으로 초기화를 시키는데 그 이유가 뭔지 알 수 있을까요? 제 생각엔 심바가 이동을 한 map에서만 0을 적용해서 구하면 될 거 같은 생각이 들어서 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/50bc7487d15a4569a1ed8e12e3f46c6f 메인에서 combi를 호출할 때에 combi(-1,b)로 보내는데 위의 링크 combi(0,b)로 보내고 combi 함수의 내부의 for문과 같이 바꿔도 괜찮을까요?? 개인적으로 함수를 호출할 때에 증가되는것이 보기에 더 잘 이해되서 한 번 여쭤봅니다!!
http://boj.kr/eaeaa929cfea47cea478e58406b544d1 안녕하세요. 예전에 알고리즘을 살짝 공부해서 투 포인터를 써서 array로 풀어보고 list로도 풀어 볼라 하는데 막혀서 질문드립니다. 위 코드를 보면 9개의 입력을 받는 cin반복문이 작동하지 않습니다. line 15까지만 있으면 잘 작동하는데 아래 코드들이 추가되면 안되더라구요. iterator를 잘못사용한거 같아 3시간 동안 구글링하며 씨름 해봤는데 그래도 모르겠습니다... 참고로 http://boj.kr/ed564ade48bf42768fe37164e175621b 는 array로 짠 코드입니다.
일단 저는 이직준비를 하기 위해 이 강의를 수강하고 있어서 제공되는 문제와 강의를 kotlin언어로 풀고있습니다. 제가 틀린문제라 아래 코드는 선생님의 C++ 해설코드를 그대로 kotlin 코드로 옮겨 놓은것인데요. go 함수의 종료 조건에 저 부분을 추가 하면 정답이 됩니다. 하지만, 선생님의 C++ 코드는 저런 종료 조건이 없음에도 잘 정답처리가 됩니다. 이게 로직의 차이인지.. 아니면 제가 모르는 C++ 언어의 특성으로 발생하는 일인지 잘 모르겠습니다. 왜 선생님의 코드에는 cnt가 음수가 되면 종료하는 종료 조건이 없이도 정답이 됩니까? // 방문해야할 오락실 개수가 음수라면 if (cnt < 0) return 0 fun go(y: Int, x: Int, cnt: Int, prevC: Int): Int { // 맵의 범위를 벗어난 경우 if (y !in 1..n || x !in 1..m) return 0 // 방문해야할 오락실 개수가 음수라면 if (cnt < 0) return 0 // 도착지에 도착한 경우 if (y == n && x == m) { if (map[y][x] == 0) { if (cnt == 0) return 1 } else { if (cnt == 1 && map[y][x] > prevC) return 1 } return 0 } // println("y $y, x $x, cnt $cnt prevC $prevC") if (case[y][x][cnt][prevC] != -1) return case[y][x][cnt][prevC] var pathCnt = 0 if (map[y][x] == 0) { pathCnt = (go(y + 1, x, cnt, prevC) + go(y, x + 1, cnt, prevC)) % 1000007 } else if (map[y][x] > prevC) { pathCnt = (go(y + 1, x, cnt - 1, map[y][x]) + go(y, x + 1, cnt - 1, map[y][x])) % 1000007 } case[y][x][cnt][prevC] = pathCnt return pathCnt }
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
안녕하세요 루키스님 비전공자이지만 루키스님의 강의 덕분에 많이 배우고 있습니다 질문이 있어서 올려요! 저는 클라이언트 개발에도, 서버 개발에도 모두 관심이 있는데 당장 취업이 급해서..! 클라이언트 개발로 우선 취업하려는 생각입니다. part1 (c++) 과 part3 (자료구조알고리즘) 강의 를 듣고 코딩테스트와 포트폴리오를 별도로 준비하면 충분할까요?? 윈도우api 와 다이렉트x는 아예 접해보지 않아서 시간이 정말 오래 걸릴 것 같아서요...! 아니면 얼마 전에 올려주신 게임 프로그래머 입문 올인원 이라도 들어야할까요?
CUDA 프로그래밍 (5) - C/C++/GPU 병렬 컴퓨팅 - 아토믹 연산 atomic op
선생님 안녕하세요. 저번에 opencl과 cuda를 같이 공부 중이던 학생이에요. 제가 프로그램을 작성하는 도중에 VRAM <-> RAM의 전송 속도가 느리다는 것을 깨달았는데요. 제가 보통 결과 값으로 40mb 정도를 가지는데(위의 자료에 따르면 6ms 정도) 이를 최대한 cpu에서 빨리 받기 위한 방법은 아직까지 존재하지 않는 것인지 알고 싶습니다!
Question 1 2주차 이론 블로그 내용에서 내부 노드의 정의가 '루트 노드와 내부 노드 사이에 있는 노드를 뜻합니다.' 로 되어 있는데 여기서 내부노드가 아닌 리프노드가 맞지 않나요? Question 2 2주차 문제 중 10709 기상 캐스터 문제 코드에서 다음 부분 질문입니다. for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(a[i][j] == 0){ int cnt = 1; while(a[i][j + 1] == -1){ a[i][j + 1] = cnt++; j++; } } } } 위 코드에서 while 문 내부에서 조건이 계속 만족되면 증가하는데, 인덱스 에러가 발생하지 않는 이유가 궁금합니다. for (int j = 0; j < m; j++) 위 for loop 문의 j < m 까지라는 게 내부 while 문까지 적용되는 건가요? Question3 2주차 문제 4659에서 isVowel을 아래와 같은 방식으로 작성하셨는데요. bool isVowel(int idx){ return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u'); } ... ... if (isVowel(idx))... 이를 아래와 같이 문자열로 만들어서 이 내부를 탐색하는 건 어떻게 생각하시나요? 저 위에 isVowel도 결국은 각각 일치하는지 탐색하는 거이지 않나요? string f = "aeiou"; int main() { for (char w : word) { if (f.find(w) == string::npos) ... } }