묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-H int로 입력을 받으면 틀립니다.
안녕하세요. 큰돌 강사님, 그리디 문제를 다시 풀고 있는데 재차 오류가 생겨서요, n은 100000이하라 INT로 받아도 된다고 생각되는데, 약 15%에서 틀렸다고 뜹니다. long long 으로 입력값을 바꾸면 정답이 됩니다. int n, visited[100004],a[100004],l,r;어떤게 문제인가요? http://boj.kr/4e8857e08eaa43f39c1898b022bc70d9 좋은 하루 보내시길 바랍니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-L 시간초과 관련 질문
안녕하세요 선생님http://boj.kr/311e90062af84c42986c1a3a55e0c1c0선생님이랑 비슷하지만 조금 다른방법으로 풀었는데 왜 시간초과가 나는지 몰라 질문 올립니다
-
미해결홍정모의 따라하며 배우는 C++
#include <algorithm>을 해주는 이유
16.3에서 설명해주신 코드에서#include <algorithm>을 해주지 않아도 min_element()나 sort(), reverse()가 정상적으로 작동이 되는데, 그 이유가 궁금합니다! #include <iostream> #include <vector> using namespace std; int main() { vector <int> container; for(int i = 0; i < 10; ++i) container.push_back(i); auto itr = min_element(container.begin(), container.end()); cout << *itr << endl; // 삽입 itr = find(container.begin(), container.end(), 3); container.insert(itr, 128); for (auto &e : container) cout << e << " "; cout << endl; // 정렬 sort(container.begin(), container.end()); for (auto &e : container) cout << e << " "; cout << endl; // reverse 정렬 reverse(container.begin(), container.end()); for (auto &e : container) cout << e << " "; cout << endl; return 0; }
-
해결됨홍정모의 따라하며 배우는 C++
call by reference 시 퍼포먼스에 관한 질문입니다.
과제로 내주신 것 중 std::thread와 std::promise를 사용하는 것을 먼저 해보고 divide and conquer를 std::thread를 이용해서 구현하는 것을 해봤는데, 궁금증이 생겨서 질문드렸습니다.강의 영상 막바지에 보여주셨던 std::async와 std::future를 사용했던 예제를 참고해서, 하나의 변수에 여러 스레드가 값을 누적시키는 것이 아닌 각자의 local sum에 값을 누적시킨 후 마지막에 모두 더하는 방식으로 구현해봤습니다. // TODO #1 : use divide and conquer strategy for std::thread cout << "thread" << endl; { const auto sta = chrono::steady_clock::now(); unsigned long long sum = 0; vector<std::thread> threads; vector<unsigned> sums; threads.resize(n_threads); sums.resize(n_threads); const unsigned n_per_thread = n_data / n_threads; for (unsigned t = 0; t < n_threads; t++) { threads[t] = std::thread(dotProductThread, std::ref(v0), std::ref(v1), t * n_per_thread, (t + 1) * n_per_thread, std::ref(sums[t])); } for (unsigned t = 0; t < n_threads; t++) { threads[t].join(); sum += sums[t]; } const chrono::duration<double> dur = chrono::steady_clock::now() - sta; cout << dur.count() << endl; cout << sum << endl; cout << endl; }그리고 처음에는 std::thread가 사용할 함수인 dotProductThread의 구현을 call by reference를 반환값처럼 사용하도록 아래와 같이 구현했습니다.auto dotProductThread(const vector<int>& v0, const vector<int>& v1, const unsigned i_start, const unsigned i_end, unsigned& local_sum) { for (unsigned i = i_start; i < i_end; i++) { local_sum += v0[i] * v1[i]; } }그런데 실행해봤더니 정답은 제대로 나오지만 속도가 제가 구현한 std::thread와 std::promise를 사용한 예제보다 훨씬 느렸고, 심지어 std::innerproduct보다도 느렸습니다.뭐가 문제일까 싶어 여러가지를 바꿔보다가 아래와 같이 dotProductThread함수에서 매번 레퍼런스에 값을 더하지 않고 변수를 하나 선언해 누적하다가 마지막에만 넘겨주도록 하였습니다.auto dotProductThread(const vector<int>& v0, const vector<int>& v1, const unsigned i_start, const unsigned i_end, unsigned& local_sum) { unsigned t = 0; for (unsigned i = i_start; i < i_end; i++) { t += v0[i] * v1[i]; } local_sum = t; }실행했더니 속도가 std::thread와 std::promise를 사용한 예제와 거의 비슷하게 나와주었습니다.call by reference로 전달된 참조에 너무 빈번하게 접근해도 퍼포먼스 저하가 일어난다고 봐도 될까요?그리고 시험삼아 출력문을 dotProductThread 내에 작성해봤더니 race condition은 일어나지 않는 것 같았습니다. 이런 경우 굳이 std::atomic이나 뮤텍스를 사용할 필요는 없나요? 또는 작업이 더욱 복잡해진다면 안정성을 위해 사용해줘야 하는 걸까요?(프로그래머가 미처 고려하지 못한 상황이라거나)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-B 이 방식은 완탐방식일까요?
http://boj.kr/a788644d92fe4bc5bb99fe02b91e1f46항상 감사드립니다. 문제 풀기 전 최대 3가지방향과 16개의 범위로 3^16 이겠거니 완탐은 불가능하겠다. 생각하고 문제를 풀기 시작했는데요..막상 풀고 선생님 코드를 보니 제 코드는 완전탐색으로 푼것같은 느낌이 들어서 질문드립니다.사실 시간초과가 나야 정상인 코드가 아닌가 싶어 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
Update_index 사용이유
안녕하세요질문이 있습니다Update_idx 를 사용하는 이유가 있나요?그냥 1부터 index를 시작하면 안되는지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F 질문입니다.
http://boj.kr/18b95ed906a04df18e9c99cc83358b9a제가 생각한 위 코드의 시간복잡도는 26c13*50*15입니다.시간 복잡도를 맞게 계산한걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
bits.stdc++.h 헤더파일에 대하여
안녕하세요. window 쓰고 있고 vs code를 쓰고있는데 오늘 구글링하면서 gcc 설치해서 다 적용시켜서 환경을 구축하였는데vs code에서 #include <bits.stdc++.h> 헤더파일을 넣으면 자동으로 적용이 되나요? 아니면 이 헤더파일을 쓰기 위해서는 따로 작업을 해야하나요? 또한 추가로 vs code 말고도 vs에서도 stdc++.h 헤더파일을 바로 사용 가능한가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
환경구축
안녕하세요 선생님.이전에 학교 수업때문에 visual studio 만 써왔고 이번에 visual stduio code를 사용하고 싶어서 인터넷에서 gcc도 다운하고 구글링과 youtube보면서 이것저것해서 했는데 가끔 오류가 뜨더라구요.. 혹시 window에서 vs code 환경 구축하는 방법 알려주실 수 있으신가요? 교안에는 mac에서만 하는 방법이 있어서..그리고 dev++ 대신 visual studio 로 하면 환경이 달라서 안될까요??코테는 주로 dev++로 진행되나요??
-
해결됨C개발자를 위한 최소한의 C++
R-value 참조에 대해서 질문이 있습니다.
r-value 참조에 대해서 질문이 있습니다. (02-rvalueRef 예제 강의 기준 r-value 참조 (임시 객체와 유효범위) 8분)코드를 포인터를 볼 수 있게 조금 수정했습니다.int testFunc(int param){ int result = param * 2; std::cout << &result << std::endl; return result;}int&& result = testFunc(10); std::cout << result << "pointer: " << &result << std::endl;임시 객체의 주소를 지우지 않고 가져다 쓰는것이라 하셔서 testFunc 함수의 return 하는 result 의 포인터를 확인 후 받는 result의 포인터가 같은지를 확인해 보았습니다. print된 2개의 result의 포인터 값이 다른 것을 확인했습니다. 혹시 임시 객체라는 것이 함수의 return result 값을 또 다른 포인터로 옮긴 뒤 받기 때문에 return result와 다르게 되는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다!
http://boj.kr/ba6ed0fbb18c4351a818827e1ef64b9e 메모리 초과가 뜹니다..어떤 부분이 잘못된 걸까요 ..?코드 상 오류는 없는 거 같아 더더욱 해결이 어렵습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 정답코드에 대해 잘 이해가 안 됩니다.
https://www.acmicpc.net/source/share/c19e6a890efe4edcb2a98fedca33b37b안녕하세요. 4-b가 어려워 강의를 들었는데도 답지코드도 이해가 안되는 부분이 있어서 질문드립니다. 16번째 라인에 sum += min(cnt, n - cnt); 해당 부분이 이해가 잘 안 됩니다. cnt를 구하는 부분이나 n-cnt를 하는 부분은 열을 뒤집을지 말지를 결정하기 위해 필요한 값이라는 것은 알고 있습니다. 하지만 min(cnt, n-cnt)를 구하여 열을 뒤집을지말지를 결정해서 연산+1 을 하는 것이 아니라, 더한다는 의미가 어떤 것인지 잘 이해가 안 갑니다.또한 행을 뒤집으면 최적해가 이미 정해졌다는 것까지는 강의를 듣고 어렴풋이 알 것 같은데, 행을 뒤집는 연산에 대한 +1은 하지 않는지도 궁금합니다. (행을 두개 뒤집는다든지, 한 개 뒤집는다든지,, 등) min(cnt, n-cnt)를 더하는 것이 행과 열의 연산을 모두 포함하는 것 같기도 한데 원리(?)에 대해 이해하기가 어렵습니다. 도와주세요!!
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
강의 내용을 따라하다 오류가 발생하여 문의 글 남깁니다
TileMap.cpp을 만들고 나서 DevScene에서 SetMapSize({63, 43})을 호출할때 _tiles = vector<vector<Tile>>(size.y, vector<Tile>(size.x)); 여기 코드에서 다음과 같은 에러가 나서 문의 드립니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 왜 틀렸는지 잘 모르겠습니다.
선생님 안녕하세요!최소값 확인오름차순모두 처리 했다고 생각하는데 1%에서 '틀렸습니다'로 나옵니다 ㅎㅎ...예제랑 제가 생각한 반례를 몇 가지 넣어보았으나 잘 통과하는 것으로 보입니다. 어떤 문제가 있을까요? 코드 링크 첨부드립니다.(변수명 너무 대충써서 죄송합니다..)https://www.acmicpc.net/source/74000922 항상 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-I 타입 관련 질문드립니다.
모든 타입을 long long 타입으로 바꿨더니 성공을 하긴 했습니다!하지만 mid 부분을 int로 설정했을 경우엔 왜 안되는 것일까요...?mid가 아무리 커도 10억+10억보다는 작을 것이라 생각해서 int로 설정했는데, 이때는 오답이 나왔습니다...!!
-
해결됨홍정모의 따라하며 배우는 C++
15.1 소유권 이동 관련 질문
15.1 강의에서 16분 20초 부근에AutoPtr(AutoPtr &a) { m_ptr = a.m_ptr; // 이 부분 a.m_ptr = nullptr; // 이 부분 } AutoPtr& operator = (AutoPtr &a) { if (&a == this) return *this; delete m_ptr; m_ptr = a.m_ptr; // 이 부분 a.m_ptr = nullptr; // 이 부분 return *this; }소유권 이동을 해주기 위해 AutoPtr 클래스에 위와 같이 복사생성자와 =연산자 오버로딩을 해준다고 하셨습니다.그런데 이 때, 제가 "이 부분"이라고 주석처리 해놓은 부분을 보면 같은 명령을 수행하도록 되어있습니다. 왜 이렇게 두 번 해주는지 궁금합니다. 복사생성자에서 해주는 것과 연산자 오버로딩에서 해주는 것. 둘의 차이는 무엇인가요? 그리고 =연산자 오버로딩에서 return *this를 하는 이유도 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 한줄로 디버깅 하고 싶은데 혹시 이 부분 나눌 수 있을까요?
ret과 재귀로 호출하는 부분 최소 값으로 셋팅하는 결과를 실시간으로 보고 싶습니다. ret = min(ret, tsp(i, visited | (1 << i)) + dist[here][i]);이 부분 나눌 수 있을까요? int temp = tsp(i,visited | (1<<i)) + dist[here][i]);if(ret > temp) ret = temp;이런식으로 나누고 싶은데 어떻게 건드려야될지 모르겠습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 질문
http://boj.kr/66b6d01488da4e168d9834f8bd0d6127저는 조합을 이용해서 풀어보았는데 이 문제는 완전탐색으로 푸는게 더 나은 방법인가요??
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
좌표계 변환 행렬 관련 문의드립니다.
안녕하세요, 이번 강의와 이전 강의(좌표계 변환 행렬)을 듣고, 좌표계 변환 행렬에서 '(B좌표계 기준) u,v,w의 성분'을 채우는 부분에 대해 제가 이해한 게 맞는지 확인차 문의드립니다.로컬 좌표계에서 월드 좌표계로 변환할 경우. 월드 좌표의 단위벡터 U,V,W 는 각각 U(1,0,0) , V(0,10), W(0,0,1) 이고, 이를 이용해 로컬 좌표계의 단위 벡터(u,v,w)의 성분을 보면u = ux*U + uy*V + uz*W v = vx*U + vy*V + vz*Ww = wx*U + wy*V + wz*W U,V,W가 위의 단위 벡터이므로, 좌표계 변환 행렬을 채울 때 '(B좌표계 기준) u,v,w의 성분'에 로컬 좌표계의 단위벡터를 그대로 채우면 된다. 또한 u,v,w는 로컬 좌표계의 Right, Up, Look 벡터이므로 이를 그대로 채우는 거라고도 할 수 있다.이번 강의의 약 21분 50초 즈음 내용. 로컬 좌표계가 월드 좌표계에서 Y축으로 45도 회전한 상태라면, 로컬 좌표계의 단위벡터도 월드 좌표계의 단위벡터 U,V,W에서 Y축으로 45도 회전했다고 볼 수 있으므로 y축 회전행렬을 적용한다.월드 좌표계로 변환하는 게 아닌 A->B 변환이라면, B좌표계 기준에서 A좌표계의 단위 벡터 u는 u = ux*U + uy*V + uz*W(여기서 U,V,W는 월드 좌표계의 단위벡터가 아님)인데 , 항상 u = (ux, uy, yz)라고 할 수 없으므로 '(B좌표계 기준) u,v,w의 성분' 을 채울 때 A좌표계의 단위벡터(혹은 Right, Up, Look 벡터)를 그대로 채울 수 없다. 예로 u = (2,2,2) / U = (1,-1,0) / V = (0,1,0) / W = (0,0,1) 이라면 u = 2U + 4V + 2W이고, uy == 4 라면 u = (2,2,2)가 성립되지 않는다.특히 3번은 틀린 듯 한데 제가 이해를 제대로 못 해서 맞다/틀리다를 판단하기가 어렵네요 ㅜ 질문에 대한 답변 외에도 표현상의 문제를 체크해주시는 것도 감사하겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
언리얼 엔진 서버 관련 질문
안녕하세요 강의 잘 들었습니다! 언리얼 iocp서버 강의는 찾을 수 없었는데 이렇게 강의해주셔서 감사합니다ㅠㅠ 강의를 다 듣고 나니 궁금한 것이 생겨 질문합니다!언리얼 엔진으로 멀티게임을 제작할 때, iocp 서버를 제작하여 연결하려면 에픽 런처에서 다운받은 언리얼 엔진이 아닌 언리얼 깃허브에서 릴리즈 버전을 다운받아 개발하여야한다는 말을 들었는데 사실인가요? 데디케이트 서버를 사용하지 않고 iocp 서버를 자체적으로 제작하여 연결하는 것을 기준으로 질문드립니다. 해당 강의를 따라 서버를 제작한다면 에픽 런처에서 다운받은 언리얼 엔진(5.3)으로 iocp서버를 제작하여 멀티게임을 만들 수 있을까요?유용한 강의 영상 감사합니다!