묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님 질문이 있습니다ㅜㅜ
저는 코드를 다음과같이 작성을 해보았는데요, 40점이 뜨고, 문제점이 뭔지도 알고 있습니다. 일단 저는 강의를 듣기 전에 코드를 작성해보는 편입니다.제 코드는 무조건 반드시 1일차의 상담을 선택하는 상황으로 가지가 계속 뻗어나가게만 이루어져 있습니다. 그래서 1일차의 상담을 선택했을때 분기가 모두 끝나는 것도 디버깅으로 확인을 했는데 그 이후 몇시간을 고민했는데도 풀리지 않네요. N의 범위를 넘어가지 않으면서2일차 강의, 3일차 강의를 선택하는 모든 경우의 수 까지도 고려하고 싶은데 거기서 손을 쓸 수가 없습니다. 이 문제를 해결하려면 제 코드에 어디를 손봐야할까요?ㅜㅜ #include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; int* T; int* P; int N; int Tindex = 0; int Total = 0; int totalarray[100]; int cnt = 0; void DFS(int Tindex, int Total) { if (Tindex + T[Tindex] > N) { totalarray[cnt++] = Total; return; } else { DFS(Tindex + T[Tindex], Total + P[Tindex + T[Tindex]]); } } int main() { scanf("%d", &N); T = (int*)malloc(sizeof(int) * (N + 1)); P = (int*)malloc(sizeof(int) * (N + 1)); for (int i = 1; i < N+1; i++) { scanf("%d %d", &T[i], &P[i]); } T[0] = 1; P[0] = 0; DFS(0, 0); //DFS(1, 0); int max = 0; for (int i = 0; i < 100; i++) { if (max < totalarray[i]) { max = totalarray[i]; } } printf("%d", max); }
-
미해결홍정모의 따라하며 배우는 C++
15:17 부분 질문있습니다.
using으로 타입을 정의하실 때 typedef와는 다르게 using check_fcn_t = bool(*)(const int&);로 하셨는데 using check_fcn_t = bool(*check_fcn_t)(const int&); 에서 check_fcn_t을 빼지 않았을 때 bool(*)의 모양으로 만들라는 형태의 에러가 발생했는데 모양이 왜 이렇게 되는 것인지 아무리 생각해봐도 잘 모르겠어서 질문드립니다.
-
미해결홍정모의 따라하며 배우는 C++
PoweredDevice(power) 생성자는 왜 호출해주나요?
virtual 키워드를 붙인다음에 PoweredDevice(power) 생성자는 왜 넣어주는지 잘 모르겠습니다. 강의내용에서도 그냥 붙여준다고만 나와서요
-
미해결홍정모의 따라하며 배우는 C++
20:50에서 코드가 오류가 뜹니다
auto[a, d] 이부분에서 오류가 뜨네요. c++ 17로 교체했는데 이유가 뭐죠
-
미해결홍정모의 따라하며 배우는 C++
질문이 있습니다.
참조나 포인터를 통한 다형성 구현은 허용되고 영상에서의 b = d와 같이 대입을 통한 다형성 구현이 허용되지 않는 이유가 뭔지 궁금합니다.
-
해결됨홍정모의 따라하며 배우는 C++
(2:15) 메모리 누수의 이유를 이해하지 못했습니다.
Q1) "클래스 Person을 지우려 할 때, 맴버 변수인 m_partner도 지우려고 시도할텐데, 문제는 count가 되서 지울수가 없다." 라고 말씀해주셨는데, 그 count라는 게 어떤 걸 말씀하시는 건가요...? 추론1) shared_ptr의 특성상 내부적을 자신이 가리키고 있는 주소의 포인터가 몇 군데인지 세고 있다는 것에 대한 count를 말씀하시는 건가요? 만약 그렇담 그 count가 어째서 문제가 되나요..? 추론2) 혹시 라이브러리 <memory>에서 작동하는 원리에서 count라는 것이 있는데 그 곳에서 문제가 발생된다는 것이라면 아직 제 단계에서는 이해하기 어려워요.. 좀 더 쉽게 설명해주실 수 있으실까요? Q2) 좌우지간, 그 count라는 문제로 인하여 순환이 되지 않으니 weak_ptr를 써야한다는 것이 이번 강의의 내용인거죠?
-
미해결홍정모의 따라하며 배우는 C++
6.11 질문있습니다
while(true) { int *ptr=new int; cout<<ptr<<endl; } 이렇게 코딩하면 메모리가 계속 증가하는 이유가 뭔가요?새로운 포인터를 계속 만들어내서 인가요?
-
미해결홍정모의 따라하며 배우는 C++
버퍼에 대해 알고싶습니다
int main() { char a = '65'; cout << a; cin >> a; cout << a; } 여기서 처음 a 를 출력하면 5가나오는 이유는 무엇인가요? 그리고 6은 어떻게 되는건가요? 버퍼에서 사라지는건가요?
-
미해결홍정모의 따라하며 배우는 C++
3.1 연잔자 우선순위와 결합법칙 질문
안녕하세요. 수강생입니다. 따라해 보세요에서 응용을 하다보니 다음과 같은 현상이 일어났는데 궁금해서 질문 올립니다. 코드 A : int main() { int a(1), b(2), c(3); a = ++b = c; return 0; } 코드 B : int main() { int a(1), b(2), c(3); a = b++ = c; return 0; }코드 A는 모두 값이 3으로 나오나 코드 B는 작동이 되지 않습니다. (b++)을 해도 컴파일이 되지 않는데 이유가 궁금합니다!
-
미해결홍정모의 따라하며 배우는 C++
[9:48] Lecture class에서 assignTeacher 함수의 parameter 형태 문의
안녕하세요, 강의에서 Lecture class 내부에 아래와 같이 함수를 정의하고, parameter형태는 아래와 같은데요, void assignTeacher(const Teacher & const teacher_input) {} 왜 const Teacher & teacher_input으로 사용하지 않고, const Teacher & const teacher_input 형태로 작성하셨는지 문의드립니다. 위와 같이 const를 2번 사용하는 경우는 앞선 강의 중 pointer에서 예로 보여주시긴 하셨는데, reference에서는 위와같이 써야하는 이유를 모르겠습니다. reference variable이 주소값을 변수 내부에 가지고 있지 않고, de-referencing해서 사용하지도 않기때문입니다. 아래의 홈페이지에서도 "Does “X& const x” make any sense?" 에서 const는 redundant라고 설명하는데 강의에서는 왜 저런 형태로 사용하는지 문의드립니다. "https://isocpp.org/wiki/faq/const-correctness#const-ref-alt"
-
미해결홍정모의 따라하며 배우는 C++
템플릿 상속을 받지 않고 부분적 특수화할때 오류
안녕하세요. 강의 정말 잘 듣고 있습니다. 템플릿을 부분적으로 특수화할때 상속을 받아서 void print()함수를 char타입에 대해 특수화를 해주셨잖아요. 그런데 앞 강의에서 member function을 특수화할때처럼 전체 부모 클래스를 상속받지 않고 그냥 print()함수만 char타입에 대해 특수화하면 안되나 해서 해봤는데 오류가 나더라구요. 즉, 강의에서 보여주셨던 부분을 주석처리하고 제가 member function부분만 특수화를 해봤는데.. template argument list must match the parameter list 라는 오류가 나더라구요. 앞 강의에서는 아래와 같은 member function 특수화할때 별 문제가 없었는데 무슨 차이인건가요? //template <int size> //class StaticArray<char, size> : public StaticArray_BASE<char, size> //{ //public: // void print() // { // for (int count = 0; count < size; ++count) // std::cout << (*this)[count]; // std::cout << endl; // } //}; template<int size> void StaticArray<char, size>::print() { for (int count = 0; count < size; ++count) std::cout << *(this)[count]; std::cout << std::endl; }
-
미해결홍정모의 따라하며 배우는 C++
(42:20)코딩에 문제가 없어 보이는데 빌드가 안됩니다.
//header //main cpp //test cpp // problem (영상 32:20와 동일함) LNK2005와 LNK1169입니다. 영상 (32:20)과 같은 문제가 발생했습니다. 추가된 파일도 없으며, (43:20)의 과정을 그대로 따라해보았는데 발생했습니다. 반복된 함수도 없는 것으로 보아 코딩에 문제점도 여전히 찾지 못하고 있습니다. 답변자님 매번 감사합니다.
-
미해결홍정모의 따라하며 배우는 C++
중요한 부분은 아니지만 강의 내용에 오타가 있습니다.
int main() { Fruit apple(APPLE); if (apple.getType == APPLE) //강의 코드 //if(apple.getType() == APPLE) 수정 후 코드 { cout << "Apple" << endl; } return 0; } apple.getType은 compile eror를 발생시켜서 apple.getType()으로 수정해줘야 할것같습니다.
-
미해결홍정모의 따라하며 배우는 C++
결국 화려한 기교가 끝나야 기본이 보이는건가..
(바쁘면 안읽어도 되는 글 강의 후기) 질문칸에 안올렸다고 뭐라하진 마세요 그냥 강의 확인하다가 손이 따라가는대로 적었습니다. +--------------------------------------------------------------------------------------------------------------------+ 이 강의를 언제 구입한지는 기억이 안 나는데 그래픽을 조금 더 자세히 알고 싶어서 이 강의를 보던 도중 고속 컴퓨팅에 대해 공부해 보라는 (홍) (정) (모) 쌤의 권유 때문인지도 모르겠습니다. 처음에 강의를 볼 때는 저는 파이썬도 해봤고 자바 프로젝트도 해봤고 C언어를 공부했으나 프로젝트를 해보지 않았던 터였고Houdini 라는 프로그램에서 오브젝트 개체를 수많은 네트워크로 전송시키면서 유체가 되었다가 불꽃이 되었다가 랜더러가 요구하는 쉐이딩 파라미터도 넘겨줘 봤으니까C++만 할 줄 알면 방구석에 박혀있던 PBRT 라는 랜더링 책을 이해할 줄 알았습니다. 강의를 마치자마자 컴공 지식이 없던 저로서는 책에서 말하는 멀티스레딩 예제를 해봐도 실전도입은 굉장히 어려웠고인텔 TBB openMP 등의 내용이 빌드마저도 화가 치밀어 올랐습니다. 그래도 즐거움에 붙잡고는 있었지만, 각개 격파 또한 되지 않았던 과제였었습니다. 한동안 포기하고 있다가 조금 더 간접적으로 나를 이해시킬 수 있는 방법이 없던 터라 계획 없이 주저앉고 말았죠. 포인터 끊김이라고나 할까요 그러다 Houdini openCL 이라는 기능을 소프트웨어에서 지원한다길래 자세히 알기위해 찾던도중... 고속 컴퓨팅을 해보라는 권유가 홍정모쌤의 말씀이 생각났고 이것을 알기 위해선 병렬 프로그래밍을 공부해야 했는데 마땅히 비슷한 주제로 이 키워드를 따라가다 보니 CUDA 프로그래밍이 프로세스가 비슷해 보여서 예제와 유다시티에서 나오는 엔비디아 강의를 억지로 꾸역꾸역 삼켜서 깃허브 예제를 돌려도 보았습니다. 그러다 보니 openCL 에서 개념이 전문가 정도로는 아니지만 기본적인 예제코딩과 깃허브 자료를 그나마 돌려가면서 이해가 시작되었습니다. 비생산적인 코딩의 연속이였습니다. 책 속에서 말하는 몬테카를로 기법도 그래픽에서 근거해서 이해하려면 배경이 없으면 이해하기 힘들어서 딥러닝 강의와 시스템프로그래밍 OS부터 난공불락의 문제를 아래와 위에서 공격하며 땜질해서 듣던도중 우연히 알게 되었고 근삿값에 도달하기 위해 교수님 강의도 보다 보니 유튜브가 알아서 학습하게 되었습니다. 저에게 맞는 수학적 지식을 보강하기 위해 변형되어갈 때쯤에 비로소 남이 만들어 놓은 설계를 그나마 읽어내기 시작했습니다. Houdini_HDK / openGL / 불칸 / TBB / OpenMP / C++멀티쓰레드 / 유체엔진 예제 / GAN 시스템 프로그래밍 터미널 유체역학 강의 열역학 강의 기타 등등을 따로따로 하나씩 다 분해해서 따라 해보고 나니 그때서야 이 책을 (그나마) 읽어 나가고 있고 정신이 나태해지고 방향을 잃어가던 중 자포자기로 언리얼 자습을 빈둥빈둥 놀면서 보다가 C++ 강의를 오랜만에 다시 보게 되었습니다. 이 강의가 숲을 이야기 하려던 것을 조금 더 가깝게 느껴집니다. 계속 참고하면서 이 강의는 사용하려고요 제가 샀을 때는 6만 원대인데 지금은 만 원대라 쫌…. 불편하내요 쌤; 엣헴;; 그래픽에서 연기를 만들기 위해 수많은 VDB박셀에 가두었던 솜방망이 포인트 폴리곤 attribute 들이 결국엔 점으로 컨트롤이 가능하지만 데이터를 어떻게 소싱을 하느냐의 주제로 새로운 라이브러리로 들어오는 것을 느끼고 아무리 어려운 그래픽 알고리즘도 결국 수학적 모델링을 근거로 한 페이크이기 때문에 두렵지는 않습니다. 모르면 찾으면 되니까요 다만 아직도 대단한 그래픽을 하는 사람으로는 거듭나지 못했내요 죽을 때까지 무언가를 할 것은 생긴 거 같은 게 전부인 거 같습니다. 결론은: 강의 좋다구요 ㅇㅇ! +--------------------------------------------------------------------------------------------------------------------+ 느낀 점: 사람은 숟가락을 질문하고 알기 위해선 결국엔 지구에 살아보지 않은 인간이라는 존재라도 또는 그러지 아니한 존재라면 인간의 생활적 패턴을 가진 배경의 사람이 되어보아야 C++이란 숟가락은 그저 밥을 퍼먹는 도구일 뿐이야 라고 말해주면 알 수 있지만 그것을 모르는 인간의 시점이 아닌 다른 시점으로 무언가를 설명하기 위해선 먹는 행위와 인간이 어떻게 생존하는지에 따른 배경과 문화를 알아야 하는 것도 있고 왜 하필 팔로 먹어야 효율이 높고 왜 숟가락은 그렇게 생겼으며 그 비율이 황금비율인지를 설명을 해줘야 그 음식을 먹는다는 행위를 설명할 수가 있다고 생각합니다. 저는 그것을 하기 위해 쓸모없는 시간을 보낸 것도 같지만 가장 행복한 시간을 이 강의를 시작으로 보냈다고 생각합니다
-
해결됨홍정모의 따라하며 배우는 C++
(C++ 초보) && (독학하시는 분들)께 드리는 = ( enum class, switch 활용과 팁) 입니다!
저 또한 홍정모 선생님의 영상강의를 보며 배우는중인 C++ 신생아 인데요, 매 강의를 다 듣고난 뒤, 여러 사람들의 질답란을 읽으며 새롭게 알게되는 부분이 많이 있었습니다 그래서 저 처럼 질답란을 적극 활용하여 공부하시는 분들께 이번엔 제가 아는 것을 나누어주고 싶어 이렇게 글을 적어봅니다! 도움이 되셨으면 좋겠습니다! 부담갖지 마시고 재미로 읽으셨으면 좋겠습니다 :) <정리> 이번강의 switch - case - break (- default - break) 문법은 어떤 변수를 switch(조건) 조건 자리에 넣어 case(상수) 상수와 대조하여 변수와 상수가 같은(==) 값일 경우, 조건에 해당하는 case 의 코드를 실행시키고자 할 때 쓰이는 문법입니다 오늘의 코드를 사람과 가까운 고수준 언어 위의 '고오오오오수준 언어' 로 간단히 보면 이런 형식입니다 switch (변수) { case (상수 ex==0) : { // 변수 == 0 일 때 동작할 코드작성 } break; case (상수 ex==1) : { // 변수 == 1 일 때 동작할 코드작성 } break; . . . default: { //case에서 찾는 값이 없을때 동작. if문의 else와 같은 기능 } break; } 그리고 앞전 강의에서 배운 enum문(열거형) , enum class문(영역 제한 열거형) 열거체들은 상수에 이름을 부여해주는 기능입니다! 그래서 switch 문과 enum문은 함께 응용되어 많이 사용됩니다. <활용> 이렇게 Colors 라는 이름의 enum 문을 작성하면 상수 0 은 BLACK 이라는 이름을 갖게 되고, 상수 1 은 WHITE 이라는 이름을 갖게 되고, 상수2 는 RED 라는 이름을 갖게 되고, (3 == GREEN, 4 ==BLUE) cin, enum class, switch를 활용하여 이런 재밌는 코드를 작성하는 것이 가능해지게 됩니다! 사용자가 0을 입력하면 Black, 1을 입력하면 white 를, 사용자가 입력한 값이 case에서 찾을 수 없을 경우 '잘못 입력했다'고 콘솔창에 출력하는 코드입니다 빨간 밑줄은 명시적 형변환을 해주고 있는 모습입니다 형변환을 안해주면 아래와 같은 오류가 발생하기 때문입니다 'case에 있는 상수식이 enum class Colors 타입인데 왜 조건식에는 int 타입을 넣는거얏!' 하고 화내는 모습인듯 합니다ㅋㅋㅋ 그래서 switch 조건식도 Colors 사용자정의타입 으로 명시적 형변환을 하여 타입을 맞춰주었습니다. 그리고 switch 문이 꽤 길어보이고 복잡해 보이지만, 비쥬얼스튜디오에는 switch 문을 프로그래머가 더 빨리, 더 쉽게 입력할 수 있도록 도와주는 자동완성 기능이 존재합니다! < switch문 자동완성 > 'switch' 입력 → (tab) → enum class 이름 (위 예제에서는 'Colors')입력 → 다른곳 클릭 중간에 스페이스바나 다른 입력은 하지 않습니다. ( 참고 : https://ntbda.tistory.com/16 ) (참고2 : https://helloacm.com/code-snippet-auto-complete-on-switch-statement-using-enum-in-visual-studio/) 꽤 재미있는 기능이므로 여러가지 enum class를 활용하여 switch 문을 만들어보세요! 자동완성 단축키 연습 조금만 하시면 손에 금방 익어서 여러가지 switch 문을 작성하실 수 있으실겁니다! 여기까지 읽어주셔서 감사합니다 :D !! 잘못된 부분이 있다면 알려주세요 수정하겠습니다!
-
해결됨홍정모의 따라하며 배우는 C++
std::cin.ignore(32767, '\n')과 numeric_limits 에서 이런 방법은 어떤가요?
<첫번째 질문> (1) std::cin.ignore(32767, '\n'); (2) std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 1번은 매직넘버를 쓰기 때문에 좋지 못한 코드이고, 2번은 <limits> 를 #include 해야 하고, 길어서 타이핑이 불편합니다. \n을 만날때까지 최대 32767 개 의 글자를 무시해라 라는 의미라면 ignore의 첫번째 매개변수에는 어떤 자료형의 signed 최대값이 인자로 들어가는구나 생각할 수 있습니다. 그 첫번째 인자로 INT_MAX 나 CHAR_MAX 같은 것을 사용하는건 어떻게 생각하시나요? <두번째 질문> INT_MAX 에는 2147483647 / CHAR_MAX에는 127 값이 들어있습니다. 제 생각엔 INT는 너~~무 많고(낭비), CHAR은 좀... 적은것 같습니다. 좀 더 넓었으면 좋겠습니다. 그렇다면 매직넘버를 사용하는 대신, Short 자료형의 최대값인 32767을 short 변수를 만들어 저장한 뒤, ignore함수의 첫번째 인자로 넣어주는 것 입니다. 위의 두 가지 방법에 대해서는 어떻게 생각하시나요?
-
미해결C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++
1번 문제 관련 질의
지금까지 배운 내용을 토대로 해서 1번 문제를 정수 크기 순서대로 산출하는 것도 가능할까요? 예를 들면 1번 예시의 입력값에 대해 1 1 9 2 3 4 5 형태로 출력하게
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
dev c++ 이 제대로 실행이 안되요
똑같이 따라했는데 실행을 하면 fail to execute 뜨면서 Error 0: 작업을 완료했습니다. 라고 뜨면서 콘솔창이 제대로 실행되지 않습니다.....
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
강의 목록에 그리디는 안보이는데 따로 다루지 않나요?
강의 목록에 그리디는 안보이는데 따로 다루지 않나요?
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
전역변수와 지역변수 간의 속도 차이가 있나요?
처음에 지금은 주석처리된 ch와 dis 배열을 지역변수로 설정했었습니다. #include <stdio.h> #include <vector> #include <algorithm> #include <queue> using namespace std; int steps[3] = {1, -1, 5}; // Checkpoints & Distances int ch[10001] = { 0, }; int dis[10001]; int main(void){ // freopen("input.txt", "rt", stdin); int s, e; scanf("%d %d", &s, &e); // Queue for BFS queue<int> Q; // Checkpoints & Distances (Time out) // int ch[10001] = { 0, }; // int dis[10001]; // Start condition Q.push(s); ch[s] = 1; dis[s] = 0; int pos, x; // BFS for minimum distance while (!Q.empty() && ch[e] == 0){ x = Q.front(); Q.pop(); for (int i = 0; i < 3; i++){ pos = x + steps[i]; if (ch[pos] == 0){ Q.push(pos); ch[pos] = 1; dis[pos] = dis[x] + 1; } } } printf("%d", dis[e]); return 0; } 그런데 3번 부터 time out 이 발생해 다른 점을 찾아보니 배열이 전역변수라는 점이었습니다. 그래서 바꿔서 다시 실행해보니 time out이 걸리지 않고 제대로 실행되었습니다. 이러한 큰 배열을 전역변수와 지역변수로 설정했을 때 속도에 차이가 있나요? 만약 그렇다면 queue나 다른 동적자료구조들도 전역변수로 설정하는 것이 좋을까요?