묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문
http://boj.kr/8edf26bd4812427b8ea57ea5702bf7aa 저는 이 문제를 , 예를 들어, string key 로 ab*ba 를 받는다고 하면substr() 와 find()함수를 이용하여 이전 문자들은 start에 저장, 이후 문자들은 end에 저장하였습니다.이후에 name 문자열에 n만큼 받으면 name을 받을때 마다 ssubstr와 length()함수를 이용하여 start와 end를 비교하여 문제를 푸는 방식으로 풀었습니다.출력은 제대로 나오는데 백준에서는 틀렸다고 나옵니다. 어디가 틀린걸까요?
-
미해결홍정모의 따라하며 배우는 C++
맥 "clang: error: linker command failed with exit code 1 " 에러
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 안녕하세요 맥 사용자입니다.본 강의 챕터 관련하여 궁금한 점이 있어 글을 남깁니다.커뮤니티에서 "lahat"님의 문제와 답변을 참고 삼아 clang+ add.cpp main_chapter1_11.cpp로 링킹 하였으나, main_chapter1_11.cpp파일이 "clang: error: linker command failed with exit code 1 "와 같은 오류 메세지를 띄고 있고 a.out 프로그램은 실행은 정상적으로 실행이 됩니다. 여기서 궁금한 점은 링킹을 정상적으로 성공 후에도 main.cpp에서는 위와 같은 오류 메세지를 띄고 있는 지 궁금합니다. 바쁘신 와중에 긴 글을 읽어주셔서 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 질문있습니다.
https://www.acmicpc.net/source/74183426 정말 단순하게, 한칸 이동 혹은 2배 이동으로 뻗어나가는 재귀를 구현하였습니다.테스트 케이스는 통과했는데 시간초과가 나네요..이게 맞기는 한 코드인지 판단이 안되어 질문 남깁니다.로직이 맞는 지 한 번 검토 부탁드리겠습니다..
-
해결됨CUDA 프로그래밍 (3) - C/C++/GPU 병렬 컴퓨팅 - 메모리 구조
계산시간 비교
알찬 강의 계속 잘 듣고 있습니다!CPU와 GPU version의 계산시간 비교에 대해 질문 드립니다. 커널에서 계산시간만 비교하면 CUDA이 훨씬 빠릅니다. CPU version (filter-host.cu): 44,784 usCUDA version (filter-dev.cu): 830 us하지만 CUDA version에서 메모리 복사를 포함하면 337,737 us 으로 CPU version보다 훨씬 느린 것 같습니다. 혹시 메모리 복사 시간을 줄이는 방법이 있는지요?
-
미해결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를 하는 이유도 궁금합니다.