묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 질문
안녕하세요 큰돌님.우선 덕분에 한문제씩 풀면서 많은 발전이 있는 것 같습니다.알고리즘 문제 풀면서 생긴 의문이 있는데요.1-J번의 경우에 저는 처음에 Combi를 사용하여 풀이를 하였는데 Combi를 사용할 경우 시간복잡도가 높아 시간초과가 나왔습니다.대략적으로 2의 30제곱(의상 수 조합) X 100(케이스)(테스트케이스 : 최대 100, 의상 수 : 최대 30) 시간초과 하지 않기 위해 다른 알고리즘을 써야한다는 이야기인데, 이때 시간복잡도가 어느정도까지 나오면 테스트 통과할 수 있는지 알 수 있을까요?
-
해결됨CUDA 프로그래밍 (6) - C/C++/GPU 병렬 컴퓨팅 - 서치 & 소트
39g-merge-global-large.cu에 대해서 질문드립니다.
안녕하세요.예저코드 39g-merge-global-large.cu를 보던 중에 궁금증이 생겨 질문 드립니다.제가 궁금한 부분은 deviceMergeSort함수 마지막 부분에 아래의 2줄입니다.cudaMemcpy( vecC, dev_vecC, TOTAL_NUM * sizeof(unsigned), cudaMemcpyDeviceToHost ); cudaMemcpy( dev_vecB, dev_vecC, TOTAL_NUM * sizeof(unsigned), cudaMemcpyDeviceToDevice );dev_vecC에 들어 있는 정렬된 데이터를 왜 for문 내부에서 dev_vecB와 vecC로 계속 memcpy하는 걸까요?제 생각에는 dev_vecB는 주소값을 스왑하여 사용하면 될거 같았고, vecC도 계산 모두 마무리되어 for문밖에서 복사해줘도 될거 같다고 생각이 들어서요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 39p 질문드립니다!
선생님 안녕하세요! 다름아니라 교안을 통해 조금씩 배우는 중인데, 왜 저는 선생님과 같은 코드를 쳤는데도, 저런식으로 오류가 뜨면서 실행이 되지 않는걸까요?ㅜㅜ auto 타입도 아예 인식이 안되더라고요.C++14버전으로 컴파일하게 설정하는 부분도 맞게 했는데 왜그럴까요? 답변 기다리겠습니다. 감사합니다!
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
가상함수 소멸자와 가상함수 테이블 질문
class Item { public: //... 생략 virtual void function1() { cout << "Item Function1()" << endl; }; } class Weapon : public Item { public: //...생략 void function1() { cout << "Weapon Function1()" << endl; }; } class Armor : public Item { public: //...생략 void function1() { cout << "Armor Function1()" << endl; }; } int main() { // 1번 암시적 형변환 Weapon weapon; Item* iPtr = &weapon; iPtr->function1(); // 2번 암시적 형변환 Armor armor; Item* iPtr = &Armor; iPtr->function1(); // 3번 명시적 형변환 Item item; Weapon* wPtr = (Weapon*)&item; wPtr->function1(); }1번을 수행하면 Weapon을 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Weapon::function1()을 호출2번을 수행하면 Armor를 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Armor::function1() 을 호출3번을 수행하면 Item을 명시적으로 Weapon으로 형변환하고 해당하는 wPtr이 Item::function1() 을 호출클래스타입을 편의상 CType, 가상함수 테이블을 가리키는 포인터를 편의상 VPtr 이라고 지칭하겠습니다.가상함수 생성시 해당하는 CType의 VPtr생성. (가상함수에 관련된 실습 시간마다 메모리 확인 시 맨 처음 주소 부분에 생성된 주소 값?)이 포인터가 가리키는 가상함수 테이블에는 CType 의 가상함수에 대한 정보가 들어가 있음.즉 CType 의 주소에는 가상함수 테이블을 가리키는 VPtr 의 정보가 내장되어 있음 => 주소의 맨 처음 값에.암시적 명시적 형변환과는 관계없이 포인터에들어간 주소값에는 가상함수 테이블을 가리키는 VPtr이 존재.그러므로 형변환이 끝난 CType에서 가상함수를 호출하더라도 VPtr 정보는 남아 있고 CType 에서 가상함수를 호출하면 원본 CType 의 가상함수를 실행하게 됨 실습 관련실습에서 Item* 배열에 있는 자식 클래스(*Weapon, *Armor) 값들이 존재한다.Item의 소멸자에 가상함수를 붙여놓으면 자식 클래스의 소멸자에도 VPtr 이 생성되고 가상함수 테이블에서 소멸자를 가상함수로서 관리한다.Item* 배열에 있는 객체들을 순회하면서 delete를 이용해 하나씩 메모리를 해제한다.이 때 *Weapon, *Armor 같은 생성된 자식 클래스 주소 값을 가리키는 포인터들이 해제된다.그리고 해당 주소값에 있는 Weapon, Armor객체들이 소멸된다.이 때 Item* 배열에 들어있기는 하지만 *Weapon 주소는 Weapon 타입 VPtr을 가지고 있으므로 Weapon 의 가상함수인 ~Weapon()을 호출한다. 형변환이 암시적, 명시적과 관계없이 포인터에 들어간 주소값이 어떤형태의 CType이냐에 따라 가상함수 function()이 호출된다고 이해하면 될까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
pow함수 int형으로 캐스팅
pow 가 double 형이라서 int 형으로 캐스팅을 하려 시도하였습니다. 근데 pow(5,4)를 그대로 프린트 찍을때는 625로 나오는데 int(pow(5,4))로 찍으면 624가 나오는 원인을 모르겠습니다.
-
해결됨홍정모의 따라하며 배우는 C++
비동기 프로그래밍 관련 질문입니다.
int main() { // future and promsise { std::promise<int> prom; auto future = prom.get_future(); auto t = std::thread([](std::promise<int>&& prom) { prom.set_value(1 + 2); }, std::move(prom)); cout << future.get() << endl; t.join(); } }이건 수업중 코드입니다.살짝 햇갈려서 구글링으로 이것저것 검색해보던중https://modoocode.com/284이 사이트의 설명을 읽다가 몇가지 질문 남겨봅니다.링크에서 std::promise 와 std::future 부분입니다. 1.cout << future.get() << endl; 여기서 작업한 값들이 promise객체의 인스턴스에 저장되어 있고 이를 돌려받아야되는데 promise객체의 인스턴스에 대한 언급없이 딸랑 get()만 쓰면 promise객체의 인스턴스로부터 돌려받는다는것을 어떻게 알 수 있나요? std::future<string> data = p.get_future();이 부분에서 약속을 했으니 그냥 get함수하면 알아서 promise객체로부터 값을 받아오고 출력까지 하는건가요? 그냥 이렇게 이해하면 되는건가요? 2.1번질문의 연장선입니다.get을 한번 더 쓰면 오류가 나는 이유가 저 링크에 의하면future 에서 get 을 호출하면, 설정된 객체가 이동 하기 때문에 절대로 get 을 두 번 호출하면 안됩니다. 라던데 이게 무슨말인가요?get함수는 그냥 값을 받아오는건데 객체가 이동한다는건 뭔가요?? 3.연산수행후 돌려줄 내부 객체 타입을 정하고연산이 끝나면 future 객체에 값을 전달함. 값을 전달할 future객체는 get_future함수를 통해 설정함.여기까진 이해가 되었는데 그럼 get함수는 (1). 전달받은 값을 출력하는 함수다.get함수 호출전에 자동으로 값은 promise객체에서 future객체로 넘어간다.(2).promise객체로부터 future객체가 값을 전달받는 행위 자체를 하는 future객체의 함수다.get함수 호출전엔 값이 안넘어간다. (1),(2) 둘 중 어느것에 해당되나요?이걸 제가 왜 햇갈려서 질문드리냐면 링크를 밑으로 살짝 내려보시면 p->set_value("some data");위와 같이 promise 객체가 자신의 future 객체에 데이터를 제공한 후에; 이부분이 이해하기 애매해서 질문드립니다.저부분은 객체에 데이터를 제공하는게 아니라 그냥 promise 객체의 인스턴스에 값을 입력하는 과정이지 않습니까? 질문이 좀 난잡한점 양해부탁드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-P 질문
안녕하세요 큰돌님!톱니바퀴문제를 풀고 예제는 전부 통과하는데다른 반례에서 막히고 있습니다.혹시 어떤 반례가 있을까요?? 톱니바퀴의 관계를 bool배열로 정의해서ture라면 톱니바퀴를 돌리는 방식을 사용하였습니다 코드에 주석처리 하였습니다!http://boj.kr/d8998b04abf748559932e676c3b4447e
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
트리순회 강의 코드 관련 질문드려요!
2주차개념 #12 트리순회(Tree traversal) 후위순회, 전위순회, 중위순회 안녕하세요! 위 강의에서 사용된 순회 코드에서 보통 다른 코드들 보면 자식노드가 1개인 경우 2개인 경우 이렇게 나누지 않고 아래처럼 짜여져 있는 코드가 많던대 저렇게 자식노드 수에 따라 나누신 이유가 있으실까요? void preorder(node<T>* run_point) { if (!run_point) return; cout << run_point->data << endl; preorder(run_point->left); preorder(run_point->right); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-f 질문입니다!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요~!go 함수에서 아래 if 문을 통해서 antic이 무조건 배워진다고 하셨는데 그 구체적인 로직이 이해가 가지 않는데 추가 설명 부탁 드려도 될까요?if(index != 'a' - 'a' && index != 'n' - 'a' && index != 't' - 'a' && index != 'i' - 'a' && index != 'c' - 'a'){ ret = max(ret, go(index + 1, k, mask)); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 메모리 초과
안녕하세요 큰돌님.1-A문제를 makePermutation(재귀)을 통하여 작성해봤습니다.vector<int> v를 순서 섞기를 통하여 앞단의 7개 값의 합이 100인경우를 추려낸 다음, vector<int> ret에 memcpy를 통하여 복사를 진행하였습니다.결론적으로는 메모리 초과로 문제해결이 안되었는데, 합이 100인 1건의 사례에 대해서만 memcpy를 사용하였고, exit(0)를 통하여 프로그램을 종료하였는데 메모리 초과가 되는 이유를 모르겠습니다.한번 봐주시면 감사하겠습니다. <오답 - 메모리 초과>http://boj.kr/e8517aff3dde4152bf20a574308f7f76<정답 - 직접 작성>http://boj.kr/ce9f91b1272f4fe7beb54ddff446104c
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-M stack으로 구현시 반례
안녕하세요 큰돌님~!http://boj.kr/c7f8555cf2714400bcd11b71d55d803d4-M 문제 stack으로 구현 해 보려구 도전 하다가 49% 에서 틀렸다고 나와서해당 로직의 반례가 발생할 수 있는 부분이 어디인지 피드백 받고자 질문드립니다.제가 구현하고자 했던 규칙은 이렇습니다.p가 i를 만나면 pop;k가 a를 만나면 pop;c가 h를 만나면 c를 pop하고 h를 push;h가 u를 만나면 (h를) pop;짝짓기 문제 같아서 stack을 떠올렷는데, 해설코드는 queue더라구요? 연습겸 stack을 사용한 구현도 완성하고 싶습니다!답변 주시면 감사하겠습니다.
-
미해결홍정모의 따라하며 배우는 C++
10:11 코드 질문입니다.
참조에 의한 값을 반환받는 함수를 이용해 역시 참조를 이용해 변수를 선언하면 함수가 끝나면서 사라지는 인자를 참조하므로 두번 출력하면 쓰레기값이 나온다고 설명해주셧는데요. Visual Studio 2019에서는 몇번을 출력해도 제대로 나오고 있습니다. 왜그런 건가요??아래 코드 46~55줄 입니다. #include <iostream>#include <limits>#include <array>#include <vector>#include <algorithm>using namespace std;//정수를 반환받는 경우int getValue(int x) { int value = x * 2; return value;}int* getValue2(int x) { int value = x * 3; return &value;}int* allocateMemory(int size) { return new int[size];}//reference로 반환int& getValue3(int x) { int value = x * 4; return value;}int main() { int value = getValue(3); int value2 = *getValue2(3); /*dereferencing해서 받는건 문제는 없으나 권장하지 않음 15~17의 value는 getValue2를 벗어나면서 사라지는데, 그 사라지는 변수의 주소값을 dereferencing하는건 위험 빌드해보면 값은 나오나 warning 뜸. 그렇다고 변수에 dereferencing은 더 위험. getValue2를 벗어나면서 사라지는 값의 주소값을 인자로 받는 값을 또 dereferencing 하는거니까 이 방법은 잘 안쓰긴 함. 단, 아래와 같이 배열의 동적할당에는 자주 씀. factory pattern이라고 나중에 배움.*/ int* array = allocateMemory(1024); //int *array = new int[1024];와 동일 //대신, 동적 할당이므로 delete해줘야하는데 delete가 allocateMemory 함수 말고 main 함수에 있어야해서 단점임. delete[] array; int value3 = getValue3(5);//getValue3이 반환하는 레퍼런스가 가리키는 실제 값이 value3로 복사해 들어옴. int& value4 = getValue3(5); //이거는 문제. value4는 getValue3가 끝나면 사라지는 26번째 줄의 value를 참조함 //없어지는 변수의 값을 복사해서 가져오는 value3는 괜찮은데, 없어지는 변수를 직접 참조하는 value4는 문제겠지 //그 얘로 두번 출력해보면 한번은 제대로 나오는데 다음은 쓰레기값 나옴. 지워진 값의 주소를 참조하니까. cout << value3 << endl; cout << value3 << endl; cout << value4 << endl; cout << value4 << endl; cout << value4 << endl; return 0;}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
도저히 반례를 모르겠습니다..ㅜ.ㅜ
안녕하세요 선생님제가 2910 예제는 다 맞는데, 3%에서 틀렸다고 뜹니다ㅜㅜ혹시 이유를 알 수 있을까요?ㅠㅠㅠhttp://boj.kr/c1d9d1181254481589bb015bcf98568e감사합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
단축키 질문합니다
17분37초에서 복사할 때 사용하신 단축키가 무엇인가요???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-X
// 가장자리에 있는 hole을 통해 최소값을 잡는다. for(int i = 0; i <= n + 1; i++){ //가장 왼쪽, 오른쪽 확인 if(hole[i][0][1] != -1) enqueue(i, 1, hole[i][0][1]); if(hole[i][m + 1][3] != -1) enqueue(i, m, hole[i][m + 1][3]); } for(int i = 0; i <= m + 1; i++){ //가장 위쪽, 아래쪽 확인 if(hole[0][i][2] != -1) enqueue(1, i, hole[0][i][2]); if(hole[n + 1][i][0] != -1) enqueue(n, i, hole[n + 1][i][0]); }한 좌표를 기준으로 위쪽 0, 오른쪽 1, 아래쪽 2, 왼쪽 3으로 설정했는데가장자리 hole을 찾을 때는 가장 왼쪽의 경우위 코드처럼 if hole[i][0][3] != -1 으로 확인 해야 하는 것이 아닌가요..?왜 모두 반대 방향을 확인하는지 이해가 잘 되지 않습니다 .. ㅜ
-
미해결홍정모의 따라하며 배우는 C++
6.17강의 중 2:40 질문있습니다.
for 문을 보다 예전 c++강의 자료나 책을 보면 선생님 처럼 코드를 구현하시던데, 실무에서도 자주쓰이는지 개인적으로 궁금해서 질문드립니다.//c++ style for(auto n : test) //c style for(int i = 0; i < 5; i++) 제가 직접 찾아본 바로는 현재 Microsoft 공식 홈페이지에서도 c 스타일인 방식으로 구현을 해놓은 것으로 확인했는 데, 실제로 어떤 방식을 자주 사용하나요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-D번 문제 궁금한거 생겨서 질문드려요~
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.C++에서는 strcmp를 쓰지 않아도 문자열끼리 같은지 안 같은지 비교가 되는건가요?되는걸 문제로 확인은 했는데, 어떤 문자열이던 되는 건지 궁금해서 질문드려요
-
미해결홍정모의 따라하며 배우는 C++
[오류] 불완전한 형식은 사용할 수 없습니다.
array<int, 5> my_arr = {1,2,3,4,5};선언에서 my_arr의 빨간줄이 그어지고 불완전한 형식은 사용할 수 없습니다.(error code : E0070)my_arr은 정의되지 않은 class std::array<int, 5>를 사용합니다. 에러가 뜨는데 이유가 무엇일까요....
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-V
안녕하세요. 강사님. 해당 문제 풀이가 잘 이해가 되지 않아서요 ㅜㅜ각 칸마다 숫자를 어떤식으로 배치한건지 잘 이해가 되지 않습니다.. ㅜnode와 a 배열이 어떻게 저런 관계를 갖는지 이해가 잘 되지 않네요 ㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G질문입니다!
http://boj.kr/55247ead26af4d899a6531ad34efeb6f저는 21행에 벡터v에 mp.first와 mp.second을 집어넣을때, 서로의 위치를 바꿔서 넣어주지 않고,이에 맞춰서 bool형의 cmp함수를 작성하였더니입력값이 2 2 2 1 1 일땐, 출력값이 2 2 2 1 1 로 잘 나오지만입력값이 2 2 2 1 1 1일땐, 출력값이 1 1 1 2 2 2로 나와서 틀리게 됩니다.어디가 틀렸는지 모르겠어서 질문 드립니다!