묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C++
대입 연산자 오버로딩시 리턴 데이터형을 참조(&)로 하지 않으면 에러 발생 합니다.
안녕하세요.대입 연산자 오버로딩 문제에서 리턴 할 데이터형을 참조(&)로 하지 않으니깐 delete하는 데에서 이미 동적 할당한 객체가 삭제(?) 되어 쓰레기 값이 있어 에러가 발생 하더라구요.대입 연산자의 경우 리턴 데이터형을 참조로 하지 않으면 delete할때 동적 할당한 데이터 m_data에 쓰레기 값이 들어가 있더라구요.이해가 되지 않아 질문 올릴려다가 객체의 주소값을 확인해 보았는데, 'array4'의 주소와 delete 할때 'this'의 주소를 확인해 본 경우 서로 다르더라구요. 왜 서로 다른지 이해가 되지 않습니다.값 복사가 일어나서 그런 것 같은데, 그렇다면 소멸자에서 array4의 객체 주소 소멸자가 아닌 다른 값 복사 난 객체의 소멸자가 불러와 지던데 왜 그런걸까요?제가 기본기가 부족해서 그런지 이런 부분들이 이해가 되지 않으면 혼란스럽네요. IntArray operator = (const IntArray& intArray){ cout << "operator = " << endl; if (this == &intArray) return *this; delete[] this->m_data; if (intArray.m_data == nullptr) m_data = nullptr; this->m_length = intArray.m_length; this->m_data = new int[m_length]; for (int i = 0; i < intArray.m_length; ++i) { this->m_data[i] = intArray.m_data[i]; } return *this; } int main() { IntArray array1{ 3,44,5 }; IntArray array2{ 10,20,30,40 }; IntArray array4(4); array4 = array1; return 0; }
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Field초기화
Field를 초기화를 Game의 생성자가 아닌 Init에서 초기화하는 이유가 뭔가요? 다른 이유가 없다면 Game의 생성자에서 초기화해도 되는건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-D lower_bound 질문있습니다 :)
안녕하세요 선생님 🙂 lower_bound와 관련하여 궁금한 것이 있어서 질문드립니다. 해당 문제는 lower_bound를 이용하여 A 안에 있는 요소들 중 하나를 골라서 B에 있는 요소보다 큰 경우를 누적하여 더한 후에 출력하는 문제였습니다. 문제의 결과 값에서 lower_bound의 역할을 유추해보면, 1, 2번째 파라미터에 넣는 배열의 범위에서 3번째 파라미터에 있는 요소보다 작은 요소의 개수를 출력해주는 함수라는 것을 알 수 있었습니다. 반대로 upper_bound는 작은 요소가 아닌 큰 요소의 개수를 출력해주는 함수라는 것을 알게 되었습니다. 그렇다면, 같은 요소의 개수를 출력해주는 방법도 있을 거라고 생각하는데요, 구글을 아무리 뒤져봐도 키워드 선택을 잘못해서 그러는건지.. 관련 자료를 찾을 수 없었습니다. 혹시 이런 함수가 따로 있다면 알려주시면 도움이 많이 될 것 같습니다 :) lower_bound가 같은 경우도 처리해준다는 자료를 보긴 했는데요, 이 자료에 신뢰성이 있으려면 해당 문제에서 A와 B의 요소가 같아도 A가 B를 잡아먹을 수 있다는 조건을 만족해야 할 것 같습니다. 아래는 제가 보았던 자료의 링크입니다.https://chanhuiseok.github.io/posts/algo-55/
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
선형탐색 -> "틀렸습니다" 가 나옵니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님. 선형탐색으로 하면 어떻게 되는지 궁금하여 백준에 해당 코드를 제출하여보았는데 예상과 다르게 "틀렸습니다" 가 나옵니다. 선형탐색은 시간복잡도가 더 클 뿐 틀린것은 아니기에 "시간초과" 가 나와야 되는거 아닌가요??#include<bits/stdc++.h> using namespace std; int n; int m; int a[300002]; int ret = 987654321; bool search(int mid) { int t_ret = 0; for (int j = 0; j < m; j++) { t_ret += a[j] / mid; if (a[j] % mid) t_ret++; } return t_ret <= n; } int main() { cin >> n >> m; int left = 1, right = -1; for (int i = 0; i < m; i++) { cin >> a[i]; right = max(right, a[i]); } ret = right; for (int i = left; i <= right; i++) { if (search(i)) { ret = min(ret, i); break; } } cout << ret; return 0; }
-
해결됨C개발자를 위한 최소한의 C++
nullprt vs null
안녕하세요. 마지막 주소록 예제를 따라하면서 궁금한 부분이 있어 질문드립니다. 두 가지 예제를 비교했을 시, 포인터를 초기화 시, NULL / nullptr 두 가지 방식을 모두 사용되고 있습니다. NULL로 초기화와 nullptr 초기화 방식에 있어, 어떠한 기준이 있는지 궁금합니다 ~ int MyList::addNewNode(const char* pName, const char* pPhone) { UserData* pNewUser = nullptr; // nullptr로 초기화 if (findNode(pName) != nullptr) return 0; pNewUser = new UserData; strcpy_s(pNewUser->name, sizeof(pNewUser->name), pName); strcpy_s(pNewUser->phone, sizeof(pNewUser->phone), pPhone); pNewUser->pNext = NULL; // NULL로 초기화 return 0; }void CMyList::releaseList(void) { CUserData *pTmp = m_Head.pNext; CUserData *pDelete = NULL; while (pTmp != NULL) { pDelete = pTmp; pTmp = pTmp->pNext; delete pDelete; } m_Head.pNext = NULL; }
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
로직 이슈 있음.
좌우로 추가 된다고 말씀주셨는데, 좌우로 추가되는 로직이 아닙니다.그리고 보니까 offset 추가되는 부분에서, UserFacingExperienceList 의 Length 가지고 로직 돌리던데, Index 없이 돌리는 부분이 없네요. 저렇게 되면 무조건 0번쨰 인덱스 가지고 계산하게 됩니다.수정은 상위 ForEachLoop 부분에서 ArrayIndex 반환하는 부분이 있는데, 그걸 쓰셔야할것 같아요. 보니까 포탈이 1개라서 눈치를 못채셨을것 같은데, 이 부분 영상수정 혹은 자막 첨부 부탁드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5 - S 실전 관련 질문 드립니다..!
풀긴 했는데 메모리랑 시간 사용량이 어마어마 해서요..실전이 얼마 안남아서 실전에서도 이렇게 풀어도 되나 싶어서 여쭤봅니다... 제가 파악한 큰돌님과 저의 코드 차이점은저는 연산 기호를 사용할 수 있냐는 기준을카운팅 배열을 쓰고 원복하고 했던 거랑수식들을 계산할 때, 스택에 넣고 계산하는 방식을 쓴 게 가장 큰 차이인 것 같습니다.그리고 실제 문제로 이런 문제가 나온다면 몇 분 안에 풀어야 될지도 궁금합니다..! 저는 40~50분 안에 풀면 안정권이라 생각했는데 큰돌님 의견이 궁금하네욤!http://boj.kr/229b1729870841dfa19aaa13c1760073
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-S 질문드립니다 :)
안녕하세요 선생님 🙂 다시 풀다가 이해가 되지 않는 부분이 있어서 질문드립니다. 재귀를 할 때 함수 파라미터에 sum - 1, minus - 1이 아닌 --sum, --minus를 넣을 때 틀리는 이유가 궁금합니다.위의 아이디어를 떠올린 계기는, -1연산을 습관적으로 sum--와 같은 후위연산자를 사용해서 풀이했었습니다. 결과가 틀렸을 때, '후위연산자여서 함수가 재귀될 때 바로 -1이 되지 않아서 그런거구나'라는 생각이 들어서 --sum과 같은 전위연산자를 사용했는데도 틀리더라구요.. 조언주시면 정말 감사하겠습니다!! ^^ http://boj.kr/2a8523783dfd497a96fc3229f86e0218
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-Q 질문 있습니다.!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/9d9e543bdcc34d91b61422b4f11385ae안녕하세요 선생님 제가 작성한 코드입니다. 아무리 생각해도 이코드도 맞아야 되는거 같은데 왜 틀렸는지 도저히 모르겠네요... 어떤 부분이 틀렸는지 궁금합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
그리디, 라인스위핑 질문있습니다 :)
안녕하세요 선생님 🙂 그리디랑 라인스위핑 문제를 다시 풀어보고있는데요, 문제마다 앞에서부터 정렬할지, 뒤에서부터 정렬할지 정확하게 판단이 서지를 않고 있습니다. 조언해주신다면 정말 도움이 많이 될 것 같습니다..!! 항상 감사합니다 :)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님, 2-T 접근방법에 대해 질문있습니다!문제를 읽고 우선 queue나 stack으로 풀어야겠다는 생각은 들었는데, 해당 문제가 우측으로 더 큰항목이 있는지 비교(input과 특정 항목을 비교)하는 문제이기 때문에, queue로 구현하면 queue의 front에 가장 큰 값이 들어올 경우, 이후 항목에서 오큰수를 부여할 수 있는 수열들이 들어오더라도 queue를 pop하지 못하고, pop할 수 있는 항목들을 queue를 순회해서 찾는다고 하면 시간복잡도가 O(N^2)으로 커져버리니까 스택을 사용해야겠다! 라는 사고에 따라 스택을 사용하기로 결정하면 되나요?또 한가지 질문이 있습니다..!! 정답 배열로 정수를 출력하는 문제라고 가정하면, int배열을 사용하여 푸는 것과 벡터<int> v 에 푸시하여 사용하는 것 어떤 것이 유리한지 궁금합니다!
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
_wfopen_s(&file, path.c_str(), L"wb"); 실패하는 경우
void Tilemap::SaveFile(const wstring& path){ { FILE* file = nullptr; ::_wfopen_s(&file, path.c_str(), L"wb");//writebinary ::fwrite(&_mapSize.x, sizeof(_mapSize.x), 1, file); <- 여기에서 크러쉬 나면서 뻗어버립니다.} 이럴 경우 관리자 권한 문제일까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
tsp함수에서 (visited | (1 << i))
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 강의잘 듣고 있습니다. 다름이 아니라 코드 중에 잘 이해가 가지 않는 부분이 있어서 질문드립니다.ret = min(ret, tsmp(i, visited | (1 << i)) + dist[here][i]);에서 visited | (1 << i)는 i를 기준으로 탐색하지 않는 곳을 확인 하기 위해서 필요한 코드인가요?ex) tsp(0, 1)이고 i = 1일때, ret = min(최대, tsp(1, 1 | (1 << 1), + dist[0][1])이 됩니다여기서 tsp(1, 1 | (1 << 1)은 0, 1번째를 탐색했고 다시 1번째를 기준으로 2, 3을 탐색하는 것일까요?0, 1을 탐색하는 이유는 1 | (1 << 1) -> 0001 | 0010 -> 0011이고 이는 0번째와 1번째를 확인했음을 의미하는 거 맞을까요?그리고 2번을 기준으로 나머지 탐색을 하지 않은 도시(3, 4)를 탐색하는 것이구요.위의 내용이 맞다면, 해당 코드에 대한 이해는 했는데 솔직히 말하면 제가 visited | (1 << i)라는 코드를 떠올리지는 못할 것 같습니다... 어떻게 하면 떠올릴 수 있을까요? 아직은 문제풀이를 많이 하지 않았으니까 그냥 외우면 되는 걸까요? ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-H 질문있습니다 :)
안녕하세요 선생님 🙂 다시 풀다보니 아래와 같은 풀이가 나왔는데요, 테스트케이스는 전부 올바른데 어디가 잘못된 것인지 모르겠어서 질문드립니다 ㅠㅠ 완전탐색을 이용하였습니다.http://boj.kr/4da9822932e3463aad4614f9fd3ab7db
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 시간초과 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요! 이번에 2-Q문제를 푸는데, 로직과 출력은 문제없는것 같은데 시간 초과가 나와서 어느 부분때문에 시간 초과가 나온지 너무 궁금합니다. http://boj.kr/0d1b70e1393b4e239c54738af690e44e항상 좋은 강의 감사합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 주난의 난
http://boj.kr/33a1d8de2da14b3490eaa1b3effe36c0안녕하세요 강사님,이런식으로 작성해보았는데 코드 리뷰 부탁드려도 될까요??
-
미해결CUDA 프로그래밍 (3) - C/C++/GPU 병렬 컴퓨팅 - 메모리 구조
pitch값에 따른 alignement boundary(size) 질문
안녕하세요, 선생님의 좋은 강의 덕분에 잘 공부하고 있습니다.강의 내용 복기 중에 한가지 의문이 생겨 질문 남깁니다.강의 17-8 matrix addition, pitched의 4분 07초 부분에서 device pitch (dev_pitch) 값이 40448 byte로 나온 것을 확인할 수 있고, 이어서 이 경우에 CUDA GPU 메모리 alignment boundary가 256 byte라고 설명 주셨습니다.여기서, 만약 alignment boundary가 256 byte 라면 device pitch 값은 40448 byte가 아닌 40192 byte 가 나와야 하지 않는지 의문이 들었습니다. 40192 byte가 40000 byte(10000개 elements) 에서 가장 가까운 256의 배수임과 동시에 40000 byte를 모두 커버할 수 있다는 근거로 이렇게 생각을 했습니다.그래서 alignment boundary 값을 512 byte로 계산을 해보니, 40448 byte가 40000 byte로부터 가장 가까운 512 배수로 계산이 되는데요. 이 경우에, 어떤 값이 맞는지 확신이 서지 않아 질문 글을 작성하게 되었습니다.제가 사용한 계산식은 pitch = ceil(row_size_in_byte / alignment_boundary_in_byte) * alignment_boundary_in_byte 입니다. 제가 아직 공부하는 단계이고, 이해가 부족했을 가능성이 큽니다. 답변에 소중한 시간 내어주시면 정말 감사드립니다. 다시 한번 멋진 강의 만들어주셔서 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-p 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님 저도 선생님의 생각처럼 코드를 이렇게 작성하면 되겠구나 라는 생각을 했습니다. 하지만 결국 코드가 생각처럼 구현 되지 않았습니다.이코드에서 제 생각이 뭐가 틀렸고 어떤 부분이 미숙했던 걸까요? ㅜㅜ코드 사고 과정1. 전체 맵에서 조합으로 씨앗을 심고 visited 처리2. 3개 의visited 에서 위 아래 로 꽃이 펴지기3. 그중에서 합이 제일 작은거 출력 하기#include <bits/stdc++.h> using namespace std; bool visited[101][101]; int n,a[101][101], ret=987654321; const int dy[] = {-1, 0 , 1, 0}; const int dx[] = {0 , 1, 0 , -1}; vector<pair<int, int>> v; int solve(){ int sum = 0; for(int i =1; i < n; i++){ for(int j =1; j < n; j++){ if(visited[i][j]){ sum += a[i][j]; for(int i = 0; i < 4; i++){ int ny = i + dy[i]; int nx = j + dx[i]; if(ny < 0 || nx < 0 || ny >= n || nx >= n || visited[ny][nx]) { return 987654321; }; visited[ny][nx] = 1; sum += a[ny][nx]; } } } } return sum; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cin >> a[i][j]; if(i >=1 && j >=1) v.push_back({i,j}); } } for(int i =1; i < n; i++){ for(int j =1; j < i; j++){ for(int k =1; k <j; k++){ visited[v[i].first][v[i].second] = 1; visited[v[j].first][v[j].second] = 1; visited[v[k].first][v[k].second] = 1; ret = min(ret, solve()); memset(visited, 0,sizeof(visited)); // visited[v[i].first][v[i].second] = 0; // visited[v[j].first][v[j].second] = 0; // visited[v[k].first][v[k].second] = 0; } } } cout << ret << "\n"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F 1062번 문제 답안코드에서 이해가 가지 않는 부분이 있습니다.
int go(int index, int k, int mask) { if (k < 0) return 0; if (index == 26) return count(mask); int ret = go(index+1, k-1, mask | (1 << index)); if (index != 'a'-'a' && index != 'n'-'a' && index != 't'-'a' && index != 'i'-'a' && index != 'c'-'a') { ret = max(ret, go(index+1, k, mask)); } return ret; }답안에서 go 함수의 기저사례 처리 부분이 이해가 가지 않습니다.if (k < 0) return 0; if (index == 26) return count(mask); 이렇게 k < 0 일때는 0을 리턴해주고 index==26일때 읽을 수 있는 단어갯수를 리턴해주고 있는데요,문제의 조건이 K개의 글자를 가르쳤을때 읽을 수 있는 단어의 갯수의 최대값을 구하는 것인데위와 같이 index==26 일때 count(mask)를 리턴해주면 k개를 모두 고르지 않은, 예를 들어 k-2만을 고른, 상태일때 읽을 수 있는 단어를 리턴해주게 되지 않나요? 저는 그래서 if(k==0) return count(mask); if(index == 26 && k > 0 ) return 0;이렇게 k==0일때 (즉, k가지를 모두 골랐을때) count(mask)로 읽을 수 있는 단어의 갯수를 리턴해주고index가 끝까지 갔음에도 불구하고 k가 아직 0이 안되었을 경우에는 k개의 글자를 가르치지 못한경우이므로 0을 리턴하게 해주었는데이렇게 하니 틀렸다고 나오네요. 왜 이렇게 하면 안되는것인지, 그리고 왜 큰돌님께서 작성해주신 답안대로 해야되는지 이해가 가지 않아서 이렇게 질문드립니다. 답변해주시면 감사하겠습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문입니다
영상 보기전에 문제를 먼저 풀어보았는데로직 arr에 L 하나! 좌표를 p_y, p_x 담기반복 {한번 반복될때 마다 ans++del_y, del_x 두 queue를 만들고2중 for문 돌면서 빙산깍습니다 만약 빙산"X" 라면 del_y, del_x 에 push 합니다2중 for문이 끝나면 del_y, del_x에 있는 좌표들을 "." 로 수정합니다맵 bfs 돌면서 L 2개가 만날수 있는지 체크합니다방문배열 초기화!만날수 있다면 ans 변수 출력 }http://boj.kr/e5a6ee722f5b467ea793402242eb25f02% 시간초과가 뜨는데 어떻게 최적화를 해야할까요..