묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 1285 질문 있습니다!
안녕하세요 선생님! ㅎㅎ 저는 고의로, 시간 초과가 나는 코드를 아래와 같이 작성해보았습니다. (주석은 테스트했던 흔적)http://boj.kr/c3476a1df6d647de81b2d85f187f35e0 그러나 제 기대와는 달리, 시간 초과가 나지 않고 1%에서 바로 '틀렸습니다' 가 뜨더라고요. 이 말은 즉 코드 자체의 로직이 잘못되어 테스트케이스를 통과하지 못하는건데 그 이유가 뭔지 잘 안 찾아져서 여쭤보러 왔어요.(count세는 함수, arr의 뒤집기 등이 잘 안 동작하는지 확인해봤는데 다 잘 동작하는 것 같아서 더 의문이에요) 어떤 부분이 잘못되었길래, 아예 테스트케이스를 통과하지 못하는 것일까요..?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
당근마켓 문제 질문있습니다!
안녕하세요 큰돌님 BFS강의 누구보다 쉽게 알려주셔서 감사합니다. 강의를 듣던 중 질문이 생겼는데요.개념 및 교안에서 최적의 거리는 visited[목적지] -1 을 하셨는데,당근마켓 문제에서는 visited[목적지y][목적지x] -1을 하지 않으신 이유가 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
당근마켓 엔지니어 문제 질문!
안녕하세요 코드를 짜던중에 뭔가 의도대로 안되어 질문드립니다.문제를 보고 생각해서 아래와 같이 만들었는데요.이후 쌤의 정답과 비교해도 어느 부분이 달라서 의도대로 안되는지 궁금합니다. #include <bits/stdc++.h> using namespace std; int n, m, ret, qx, qy, nx, ny, sx, sy, cx, cy; int visited[101][101]; int a[101][101]; vector<int> adj[101]; int dy[] = {-1, 0, 1, 0}; int dx[] = {0, 1, 0, -1}; void bfs(int y, int x){ queue<pair<int,int>> q; visited[y][x] = 1; q.push({y, x}); while(q.size()){ tie(qy, qx) = q.front(); q.pop(); for(int i = 0; i < 4; i++){ ny = qy + dy[i]; nx = qx + dx[i]; if(ny < 0 || ny >= n || nx < 0 || nx >= m || a[ny][nx] == 0) continue; if(visited[ny][nx]) continue; visited[ny][nx] = visited[qy][qx] + 1; q.push({ny,nx}); } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> a[i][j]; } } cin >> sy >> sx; cin >> cy >> cx; bfs(sy,sx); cout << visited[cy][cx] << "\n"; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cout << visited[i][j] << ' '; } cout << "\n"; } }
-
미해결홍정모의 따라하며 배우는 C++
5분 17~5분 34초 객체 잘림 질문
안녕하세요. 저도 객체 잘림에 대한 의문이 들어 durams 님의 질문을 보고 나서 나름대로 정리를 해보고 있는데 (durams 님이 질문에 작성하는 코드)class MyArray { private: int m_data[5]; public: int& operator [](const int& index) { if (index < 0 || 5 <= index) { ArrayException e; cout << &e << endl; throw e; } return m_data[index]; } }; void doSomething() { MyArray my_array; try { my_array[100]; } catch (Exception& e) { cout << "doSomething()" << endl; cout << &e << endl; e.report(); throw e; } } int main() { try { doSomething(); } catch (Exception& e) { cout << "main()" << endl; cout << &e << endl; e.report(); } return 0; } catch (Exception& e) { cout << "doSomething()" << endl; cout <<"catch 참조 변수 주소: " << &e << endl; e.report(); throw e; }위의 코드를 설명해보면, (Exception& e)는 throw된 객체의 참조이고 위의 throw e;의 e는 throw 될 때 e가 참조하고 있는 변수를 '복사 생성'한 독립적인 객체다 또한 'throw;될 경우 복사 생성하지 않고, catch에서 잡은 예외 객체를 그대로 다시 던지는 것'이다 즉, catch의 &는 부모 type의 매개 변수를 참조 없이 선언하여 객체 잘림이 될 경우를 예방하는 것이다.위의 설명들이 맞을까요?그렇다면 5 분 17초에서 임시 객체를 throw하고 있고 매개 변수는 참조의 형태를 가지고 있기 때문에 객체 잘림이라는 설명은 맞지 않고 다형성의 자식의 객체를 부모의 참조로 조작하는 경우인 것 아닌가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
64.애니메이션 강의의, AssimpTool 에서 FBX 애니매이션 데이터를 옮길 때의 강의 오류가 있는 것 같습니다.
문제는 해결했지만, 강의에 큰 오류가 있는 것 같아, 강의를 듣는 분들에게 공유하는 것이 좋다 생각돼서 글을 작성했습니다. 강의의 Transform 코드가 미흡하다 생각해서, [LH, row_major, 요우->피치->롤] 을 전제로 하는 Transform ( Vec3, Vec4, Matrix3x3, Matrix4x4, Quaternion ) 을 다른 교재(이득우저 게임수학) 를 참조하여, 강의 코드에 적용해서 공부하고 있었습니다. 문제없이 잘 진행되다, 65.애니매이션 #2 에서 AssimpTool 로 FBX를 변환한 데이터를 애니매이션 진행할시, 로테이션이 반대로 되는 문제가 있었습니다. 이틀에 걸려 문제 원인을 찾았는데, 원인 코드는 아래와 같습니다 (강의 코드의 AssimpTool 프로젝트의 Utils 파일의 Converter.cpp 의 내용) /*std::shared_ptr<asAnimationNode> Converter::ParseAnimationNode(shared_ptr<asAnimation> animation, aiNodeAnim* srcNode){ std::shared_ptr<asAnimationNode> node = make_shared<asAnimationNode>(); node->name = srcNode->mNodeName; uint32 keyCount = max(max(srcNode->mNumPositionKeys, srcNode->mNumScalingKeys), srcNode->mNumRotationKeys); for (uint32 k = 0; k < keyCount; k++) { asKeyframeData frameData; bool found = false; uint32 t = node->keyframe.size(); // Position if (::fabsf((float)srcNode->mPositionKeys[k].mTime - (float)t) <= 0.0001f) { aiVectorKey key = srcNode->mPositionKeys[k]; frameData.time = (float)key.mTime; ::memcpy_s(&frameData.translation, sizeof(Vec3), &key.mValue, sizeof(aiVector3D)); found = true; } // Rotation if (::fabsf((float)srcNode->mRotationKeys[k].mTime - (float)t) <= 0.0001f) { aiQuatKey key = srcNode->mRotationKeys[k]; frameData.time = (float)key.mTime; frameData.rotation.x = key.mValue.x; frameData.rotation.y = key.mValue.y; frameData.rotation.z = key.mValue.z; frameData.rotation.w = key.mValue.w; found = true; } */ ==>> 위 코드에서, Quaternion 로테이션을 전치하기 위해, x, y, z 의 부호를 거꾸로 하는 코드가 필요합니다. 수정한 제 코드에는 아래와 같습니다 frameData.rotation.X = -key.mValue.x; frameData.rotation.Y = -key.mValue.y; frameData.rotation.Z = -key.mValue.z; frameData.rotation.W = key.mValue.w; 저렇게 코드를 수정하니, (LH, row_major) 를 전제로 하는 Transform 코드에서 잘 작동하더군요. 물론 강의의 DirectX::SimpleMath 를 바탕으로 만들어진 Transform 을 사용하면 아무 문제 없습니다.제가 SimpleMath를 제대로 이해하지 못해서, 어떻게 강의 코드가 잘 작동하는지를 이해하지는 못했고, 여전히 의문이 남습니다. 강의에서도 FBX 데이터는 RH 를 전제로 만들어졌고, 강의는 LH 를 전제로 하기에, AssimpTool 에서 본 트랜스폼 데이터를 변환할 때에, 아래 강의 코드인 Converter::ReadModelData 에서,bone->transform = transform.Transpose();트랜스폼을 전치합니다. Converter::ReadKeyframeData 에서도, if (findNode == nullptr) 에서도transform = transform.Transpose();로 전치를 하는데,앞서 제가 수정했던 else (애니매이션 데이터가 있는 부분) 에서는 전치 (rotation을 거꾸로 전환하는 코드)가 누락됐습니다. 정리하면, 강의의 일부 코드에서는, RH -> LH 를 위한 전치(로테이션 거꾸로) 코드가 있는데, 일부 코드에서는 전치 코드가 없는데도, 강의 코드는 잘 작동한다는 겁니다. 아무튼 제 문제는 해결됐습니다. 강의를 보다 혼동하실 분들이 제 글을 참고했으면 좋겠네요. 제 코드를 담은 깃허브 링크도 공유합니다https://github.com/HeeTaeKim996/Learning_DirectX11_3D
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
조합 표현 방식 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 ! 조합을 직접 그려보라고 하셔서, 직접 그림으로 표현해보다 궁금한게 생겨 질문드립니다. 타고 내려가다가 c(2, [0,1,2]) 해당 부분에서 , start = 1 i=2 인 상태에서 b.pop_back()을 진행하면, 백터 b에만 영향을 미치는거 아닌가요? 왜 i--를 해주지 않아서 i =2로 그대로 남아 있는데, C(3, [0,1,3])이 될 수 있는지 궁금합니다 .ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
삼성전자 코딩테스트 대비할 때
안녕하세요 선생님, 저는 제목과 같이 1순위 희망 기업은 삼성전자이고 이후에도 제조업 기반의 회사 코딩테스트를 보게 될 거 같은데, 현재 학습하고 있는 4주차 비트마스킹을 우선적으로 학습하는 게 좋을지 아니면 그 뒤에 이분탐색이나 DP같은 문제를 먼저 학습하는 게 좋을지 여쭤보고 싶습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 반례 질문있습니다.
안녕하세요! 선생님 제가 짠 코드가 작동하지 않는 이유를 도저히 모르겠어서 질문 올립니다.답으로는 구름이 등장할 때까지 카운트를 답에 넣는식으로 작성해 주셨습니다.while(a[i][j + 1] == -1){ a[i][j + 1] = cnt++; j++;}1 5.c..c-> -1 0 1 2 0 -1-> -1 0 1 2 0 1http://boj.kr/c6c895e92431416a87ea2b64d7d50287 <- 제 코드입니다.저는 카운트를 끝까지 넣고 구름이 등장할 때마다 덮어씌우는 방식을 사용했습니다.1 5.c..c-> -1 0 1 2 3 4-> -1 0 1 2 0 1제가 상상할 수 있는 케이스는 다 정상 작동해서 어떤점이 문제인지 모르겠습니다.입력에서 마지막에 ' . '을 덜찍어줬을 경우 밖에 상상이 안갑니다..그냥 안되는 코드구나 하고 넘기기 찝찝해서 질문 남깁니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T 질문 있습니다!!
먼저 좋은 강의 해주셔서 감사의 말씀 올립니다!!제가 첫 시도때 못 풀고 선생님 강의를 보고 그 다음날 다시 복습하는 과정에서 제 나름대로 로직을 찾아보고 테스트 케이스를 다 푼 코드를 만들었는데, 결과적으로 시간초과가 떴습니다.그래서 선생님 코드랑 비교해봤는데, 제가 생각했을 때 어디서 차이가 나는지 모르겠어서 이렇게 질문남깁니다. 읽어주셔서 감사합니다!!http://boj.kr/c8fc36cc6e9844a88c4495c0a7e8f3a4
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 17071 시간 초과
안녕하세요 선생님, 17071 문제를 푸는데 도저히 시간 초과가 해결이 되지 않아 질문드립니다. http://boj.kr/205232630d404eddbd6e2f0eeb5e5627 맨 처음에 주석에 달린 조건문이 없을 때는 메모리 초과가 났었고, 이를 해결하기 위해 조건문을 추가했어요. 다만 해당 방법으로 구현하니 시간 초과 문제가 나더라고요. 더더욱 최적화를 해야할 것 같은데, 현재 제 코드에서 더 최적화할 수 있는 방법이 뭔지 궁금합니다. 그리고 이 문제만 6시간 이상 붙잡고 있는데, 이게 맞는건지 잘 모르겠어요. 아예 아이디어가 생각이 안나면 이렇게까지 시간을 붙잡고 있지는 않고, 바로 아이디어 힌트를 얻으려고 할텐데 어느정도 될 것 같은 아이디어(==전체적인 설계나 시간 복잡도, 공간복잡도를 고려했을 때)로 구현했을 때 예상치 못한 동작을 한다던가, 메모리 초과나 시간 초과를 겪으면 제 방법에서 보완하기 위해 고민하다보면 시간이 너무 많이 지나있더라고요. 물론 선생님의 해설은 훌륭해서 잘 이해가고, 해당 방법으로 풀면 풀린다는 것도 잘 알아요.하지만 그건 제가 푼 게 아니라 선생님이 푼건데, 그저 이해하고 따라하기만 하면 낯선 아이디어를 떠올려야할 때 스스로 생각하는 힘이 부족한 느낌이 들더라고요. 그래서 계속 어떻게든 제 방법의 문제점을 찾아내고 해결하려고 붙잡게 되네요. 방법의 시작 자체가 잘못된 걸수도 있는데, 그렇다면 무엇이 잘못되었는지 파악하려고 하고요. (물론 잘 안돼요. 시간만 버리는 것 같습니다.) 실력도 별로 느는 것 같지 않아요. 연습 시간은 너무 많이 걸리고요. 코드도 너무 못 짜는 것 같아요.제 방식이나 생각이 잘못된건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 이해가지 않는 설명이 있어 질문드려요!
안녕하세요 선생님! 수업 듣는 도중 이해가 가지 않는 부분이 있어 질문드리게 되었어요. "8:19~ 이후" 부터 범위가 50만이기 때문에 50만 * 50만의 2차원 배열을 만들 수 없다고 설명해주셨어요. 하지만 만약 범위가 500 정도라면 2차원 배열을 만들어서 활용했을 것이다 라고 말씀해주셨고요. 저는 범위가 500일 때, 2차원 배열을 어떤 식으로 만들어서 활용하신다는건지 잘 이해하지 못했어요. arr[수빈이의 상태][동생의 상태] 로 만들어서 활용한다는 의미인 것으로 이해했고, 이 "상태" 라는 것은 이 문제의 경우 "위치, 즉 x값" 이라고 생각했어요. 그렇다면 예를 들어arr[1][3]은 수빈이가 x=1에 위치하고, 동생이 x=3에 위치할 때의 값이라는 건데, 그 "값"은 무엇을 의미하나요? 수빈이와 동생이 각각 해당 위치일 때의 시간을 의미하는건가요? 만약 '시간'을 의미하는게 맞다면, 저는 해당 배열을 활용하는 예시가 전혀 생각나지 않아서 질문드렸어요. 간단히 생각해보았을 때는 오히려 불필요한 행위가 될 것 같기도 하고요. 왜냐하면 저희가 궁금한것은 궁극적으로 arr[samePos][samePos] 일텐데 이 값을 알아내는 순간은 arr가 필요 없을 것 같아서요.결국 질문을 아주 간단하게 요약하면,"범위가 500 정도라면 2차원 배열을 만들어서 활용했을 것이라고 해주셨는데, 어떻게 활용한다는 건지 이해가 안갑니다. 활용 방안이 떠오르지 않아요" 입니다. 감사합니다.
-
해결됨[입문] Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발
강의 자료 pdf 다운로드 할 수 있을까요?
안녕하세요 강의 자료 pdf 다운로드 할 수 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-A 15686번 시간복잡도 질문 드립니다.
안녕하세요 선생님~!처음엔 15686번 문제를 bfs로 곁들여서(?) 풀었는데 시간초과가 나더라고요. 그래서 bfs를 사용하지 않고 푸니까 시간초과없이 문제가 정답처리 되었습니다. 정답 코드 : http://boj.kr/5fa47b86ba5246119038da418cfad011시간초과 났던 코드(bfs 사용) : http://boj.kr/ef1079acc43c4eb8ab9aeafe01d00bd2 이후 시간 초과가 났던 이유를 분석해봤는데, 제 생각은 아래와 같아요. 치킨집을 고르는 최대 개수 : 13C6 집의 최대 개수 : 100 13C6 * 100 = 171,600 (많이 여유로움) 하지만, bfs를 각 집마다 적용했으므로 (50 * 50) = 2500을 최대치로 잡고 더 곱해줘야 하므로 171,600 * 2500 = 629,000,000 따라서 시간 초과가 난다. 그래서 bfs를 사용하지 않고 abs를 사용해서 바로 거리를 계산하면 이 값이 최대 13이 되므로, 171,600 * 13 = 2,230,800 (여전히 여유로움)이라서 시간 초과 없이 통과되었다고 판단했어요. 제 질문은 아래와 같아요.bfs를 사용했을 때의 시간 복잡도 계산식에 오류가 없나요? (잘 계산한게 맞나요?)bfs를 사용하지 않을 때의 시간 복잡도 계산식에도 오류가 없나요? (잘 계산한게 맞나요?)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O 15684 시간복잡도 질문드립니다.
안녕하세요 선생님! 결국 시간초과 문제를 해결했긴 했지만, 시간 복잡도를 어떻게 계산하는게 좋을지 궁금해서 질문드리려고 해요. 시간 초과가 났던 코드http://boj.kr/8fe9f1e620454720a985b58a993d229a통과 됐던 코드http://boj.kr/864f7c65db52442bada271fe193a2ec3기본적으로 선생님의 설명대로, 300C3 == 대략 4,500,000(450만) 은 반드시 든다고 가정했어요. 이때, 두 코드의 차이점은 다음과 같아요.movePlayer + isSamePosition 함수를 각기 사용하는가checkedPlayer 함수 하나를 사용하는가 만약 movePlayer + isSamePosition 를 사용한다면 제 생각에는 300 + 10 = 310 정도를 생각했고, 이로 인해 최종 시간 복잡도는 13억 5000만(450만 * 대략 300) 으로 생각했어요. 이는 13초 정도로 생각했고요. 하지만 checkedPlayer 함수를 사용하는 순간, 중간에 break 할 수 있어 300까지 계산할 일은 거의 없겠지만.. 정말 최악의 최악일 경우 n-1 player의 맨 h 행까지 계산해야할 수도 있을거라고 생각했어요. 그럼 결국 300까지 계산하게 되는거고, 이 또한 시간 복잡도가 13초 정도가 되는거고요.그래서 제 질문의 핵심은 다음과 같아요.시간 초과가 났던 코드, 통과한 코드의 시간 복잡도는 어떻게 계산해야하는가? 계산 결과 어떤 시간 복잡도를 가진다고 봐야하는가?checkedPlayer를 사용한다고 하더라도 최악의 경우에는 300번 가량을 계산해야하는 것은 마찬가지일 것 같은데, 왜 통과되는것인가? 물론 시간복잡도를 완전 정확히 계산할 수는 없지만, loop 횟수나 재귀함수의 호출횟수로 정량화하여 대략 예상하고 싶은데 이 예상치 조차 세워지지 않아서 혼란스러워 질문드렸어요 ㅜㅡㅜ
-
미해결홍정모의 따라하며 배우는 C++
Resource.h 코드 알려주세요
169.15.4170.15.5 등에서 cpp 파일은 있어서 따라 코드를 치면서 컴파일러 해보는데요.강의에서 Resource.h 코드를 몰라서 컴파일러 못하고 있어요.코드 알려주세요.컴파일러 해 보면서 확인하고 싶고, 강사님 의도를 이해하고 싶습니다. 감사합니다.
-
해결됨스스로 프로그래밍 하는 능력을 키우는 C++
연습문제
아스키코드 강의부터 연습문제가 안 나오는데 원래 그런가요? 강의에서 숙제를 들가면 권한이 없다고 안 뜨네욤
-
미해결[게임 프로그래머 도약반] DirectX11 입문
SkyDemo에서 카메라 입력이 작동하지 않는 문제
SkyBox 실습에서 화면에 텍스처 렌더링까지는 잘 되는데, 문제는 실행했을 때 WASD 입력을 넣어도 카메라가 움직이질 않습니다. 회전 행렬이 잘못 적용되어서 텍스처가 함께 이동하는 건가 해서 Update에 아래와 같이 회전을 직접 줘봤는데, 이 때는 카메라 회전이 되어 하늘이 움직이는 것처럼 잘 보입니다. _camera->GetTransform()->SetRotation(Vec3(0, _rotation, 0)); _rotation += 0.25f * DT; 제공해주신 A-34)+SkyBox에서 다른 데모는 카메라 입력이 잘 되는데, SkyDemo만 동일한 문제가 발생했습니다. 마찬가지로 카메라 입력이 먹히질 않습니다. 중단점을 찍고 디버깅을 해봐도 InputManager::Update()와 CameraScript::Update()가 매 프레임 정상적으로 호출되고 있었습니다.혹시 SkyDemo의 특정 초기화 순서나 렌더링 파이프라인 설정이 다른 데모와 달라서 입력 이벤트 처리에 영향을 주는 건 아닌지 궁금합니다.아직 해결하지 못해서 질문을 올립니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G a[i]로 입력을 받는 이유 질문
2-G a[i]로 입력을 받으시는데 다른 문제들과 연계되는 특별한 이유가 있는지 궁금합니다
-
미해결[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
이제 강의 더 안올라오나요?
전에 사놓고 이제 들으려고 봤는데몬스터 AI부터는 비어있더라구요커리큘럼이 다 안끝난 것 같은데 강의 더 안올라오나요??
-
해결됨Windows System 프로그래밍
7강 스레드제어 강의, 26분경 질문입니다.
기존 SetEvent(pThreadDescList[i].hEventList[0])에서 .hEventList[i]로 바꾸셨는데 기존대로 .hEventList[0]로 해야 핸들리스트에서 0번째에 해당하는 핸들을 받을 수 있는게 아닌가해서 질문드립니다. (해당 코드에서 [i]면 0번째 스레드는 0번째 핸들, 1번째 스레드는 1번째 핸들,,을 받아오는것 같아서..)