안녕하세요, 큰돌님. 강의 잘 듣고 있습니다. DFS 재귀 vs. 반복문 구현 방법을 결정하는 기준 에 대해 여쭙고 싶습니다. 제가 현재 고민중인 접근 방식은 다음과 같습니다: 1. 완전 탐색(완탐) 문제의 경우 일단 재귀로 구현 2. 엣지 케이스 테스트 시 메모리 초과(Memory Overflow) 또는 시간 초과(Time Overflow)가 발생하면 반복문으로 변경 코딩 테스트(코테)의 경우, 위와 같은 접근 방식이 적절할 지 조언을 부탁드리겠습니다. 재귀로 풀면 쉽게 풀리는 걸 알았지만 DFS를 반복문으로 구현 하면 디버깅이나 메모리 측면에서 유리하다고 알고 있어, 이번 문제를 오기로 반복문으로 접근하여 풀고자 했습니다. 그러나 결과적으로 재귀로 작성한 코드보다 성능이 낮게 측정되었습니다. 여러 최적화 끝에 다음과 같은 코드를 작성했는데, 큰돌님께서 작성하신 코드보다 메모리를 4KB 더 소모 하고, 실행 시간이 26ms 더 느리게 측정되었습니다. 테스트 케이스에 따라 제 코드가 더 빠르게 동작할 수도있겠지만 결과적으로, 어떤 문제는 반복문으로, 어떤 문제는 재귀로 풀어야 적절할지 를 어떻게 결정하지? 가 의문으로 남아 질문드립니다! #include <bits/stdc++.h> using namespace std; const int dy[4] = {1, 0, -1, 0}; const int dx[4] = {0, 1, 0, -1}; int R, C; int grid[20][20]; inline bool is_valid(int y, int x) { return (0 <= y && y < R && 0 <= x && x < C); } int iterative_dfs() { stack<tuple<int, int, int, int>> st; int startMask = (1 << grid[0][0]); st.push({0, 0, 1, startMask}); int maxDepth = 0; while (!st.empty()) { auto [y, x, depth, used] = st.top(); st.pop(); maxDepth = max(maxDepth, depth); for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (!is_valid(ny, nx)) continue; int alpha = grid[ny][nx]; if (used & (1 << alpha)) continue; int nextUsed = used | (1 << alpha); st.push({ny, nx, depth + 1, nextUsed}); } } return maxDepth; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> R >> C; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { char tmp_c; cin >> tmp_c; grid[i][j] = tmp_c - 'A'; } } cout << iterative_dfs() << "\n"; return 0; }
안녕하세요 강사님. 헤더파일 만들기 강의 부분을 보다 의문점이 생겨 질문 드립니다. 3분20초쯤에 보면 강사님께서 add함수를 프로토타입 선언만 하시고 정의는 없이 빌드하셨는데 오류없이 작동하였습니다. 저도 똑같이 따라해봤는데, 저는 링커 오류가 발생해서 나름대로 구글리을 하고 찾아보니 프로토타입을 선언한 뒤, 반드시 함수에 대한 정의도 해야한다고 하는데, 왜 강사님이 하셨을 때는 오류없이 작동이 된걸까요? +추가질문 다른 수강생들의 질문을 보다가 makefile과 cmake의 존재에 대해 알게되었는데요. c++로 대형 프로젝트를 진행하게 되면 상당히 중요하게 사용된다고 들었습니다. 소스코드와 헤더파일들이 한 디렉토리안에 있으면 IDE에서 자동으로 컴파일과 링크를 해주는데 굳이 makefile을 사용해야 하는 이유가 뭔지 궁금합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 해당 강의 보면서 처음 주어진 class 기능들만 보고 class를 구현하다 에러를 접해서 질문 드립니다. Lecture class class Lecture { private: std::string l_name; Teacher l_teacher; Student l_student; public: Lecture(const std::string& name_in) :l_name(name_in) { } } Student class class Student { private: std::string s_name; int s_point; public: Student(const std::string& name_in,const int& point_in) :s_name(name_in),s_point(point_in){} } Teacher class class Teacher { private: std::string t_name; public: Teacher(const std::string& name_in) :t_name(name_in){} } 위 코드처럼 class를 구현하였는데(함수부분은 생략하였습니다.) Lecture class에서 "no appropriate default constructor available"에러코드가 발생하였습니다. 여러 시도 끝에 Teacher(const std::string& name_in="no name") :t_name(name_in){} 과 같이 매개변수에 기본값을 지정하였더니 에러코드가 사라졌습니다. 이러한 코드의 이유가 뭔지 잘 이해가 되지 않습니다. 도움주시면 감사하겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 풀이를 보지 않고 다시 풀어봤는데 0이 많이 찍히는 결과가 나오네요. 어느 부분이 문제일까요? http://boj.kr/2f5676322ed5440190d5c89ab3b727a9
안녕하세요 선생님 우선 좋은 강의 감사드립니다. 제 고민은 실제 고객사 PC에 MFC 프로그램을 설치할 때 어떻게 하면 문제를 예방할 수 있을까에 대해 조언을 받고 싶습니다. 고객사 PC에 제가 만든 프로그램을 설치하려고 하니, 솔루션 폴더 내에서 어떤 파일들을 Ctrl C+V 해야 하는지 막막합니다. 왜냐하면, 보통 제가 사용자 입장으로서 특정 프로그램(게임, 영상 편집 프로그램)을 사용할 때는 설치 프로그램을 실행해서 '설치'라는 작업을 하는데, 막상 제가 만든 MFC 프로그램을 고객사에 납품할 때 어떠한 과정을 거치면 좋을 지 조언을 여쭙고 싶습니다. 최종 고객사에 납기 시에는 Release 모드로 변경해서 build하는 것으로 알고 있는데 , 맞는지 여쭙고 싶습니다. 항상 감사드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 이런식으로 풀어봤는데 테스트케이스는 맞았다고 나오는데 어떤 부분 때문에 틀렸는지 모르겠네요 ㅜㅜ http://boj.kr/3ba0104138744d4094e65dcb3ae56e5f
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 학습 완료 후 루키스님 게임 서버 프로그래머 로드맵 따라가면 될까요? 일단 저의 상태는 서버쪽 먼저 공부하고 싶은 마음이 크고 언리얼과 유니티 경험이 없습니다. [c++과 언리얼로 만드는 MMORPG]의 경우 part1에서 바로 part4로 넘어가고 [c#과 유니티로 만드는 MMORPG] 강의에 경우에도 1, 4, 7로 구성되어 중간중간 비는 부분 때문에 어떻게 수강 계획을 잡을지 고민되어 질문드립니다!
강의 내용은 Editor 실행 시, 로그를 확인 하는 건데... Shipping으로 패키징하고 실행했을 때... 로그 파일을 남겨서 확인할 수 있는 방법에 대해서 알 수 있을까요? (development로 패키징하여 실행했을 때, 로그 파일 남는 거는 확인했습니다.) 알려주실 게 많다면... 관련 사이트라도 부탁드립니다.ㅠㅠ
중첩 반복문으로 2개의 원소를 뽑는다고 했을 때 결국 이 알고리즘의 시간 복잡도는 n^2 이니까 최악의 경우 150,000 * 150,000 나오잖아요? 대략 2억개 넘는데 시간 초과가 안뜨는 이유가 궁금합니다 단순히 C++ 연산 속도가 빨라서 그런건지.. C# 이나 Java, Python 같은 언어로 하면 안 풀리는지.. 궁금합니다