묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
output에 출력이 되지 않습니다.
output에 출력이 되지 않고, memory 창에도 어드레스가 없다고 나오는데 해결 방법을 모르겠습니다 ㅠㅠ
-
해결됨CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
hello-prrallel.cu 의 병렬처리에 관하여
좋은 강의 고맙습니다.병렬처리라면 일반적으로 다른 쓰레드에 영향을 주지 않고 수행이 될거라 생각이 됩니다.예제 코드에서 hello<<<1,8>>>();을 이용하여 쓰레드 8개를 병렬로 돌리는데 출력된 값은hello CUDA 0!hello CUDA 1!hello CUDA 2!,,,hello CUDA 7!이 되는 것을 볼 수 있는데 병렬로 처리된다면 출력 되는 숫자가 순차적으로 나올 수 없는 것 아닌가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재126 int형 우선순위큐
while(pq.size()){ cout << pq.top() << " : " << pq2.top() << " : " << pq3.top() << '\n'; pq.pop(); pq2.pop(); pq3.pop(); } 이코드에서 궁금한것이 있는데요 pq.size()는 5이고 참이니깐 while문 안에있는 조건은 계속 돌아가서 무한루프가 되는게 아닌가요?그리고 코드마지막에 있는 pq.pop(); pq2.pop(); pq3.pop(); 는 왜 한번씩 더 써주는건가요? 위에 있는 코드로도 충분하지 않나요?
-
미해결홍정모의 따라하며 배우는 C++
fptr1에 Something으로 접근 연산자를 붙히는 이유는 Something 클래스의 인스턴스 주소를 넘겨줘야해서 인가요?
int (*fptr2)() = &Something::getValue;는 단순히 정적 메모리에 있는 Something클래스의 함수 포인터를 초기화한다고 이해 할 수 있지만 제목 그대로의 의문점이 있습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 9996번 질
안녕하세요 큰돌님 강의 잘 듣고 있습니다. 1-G번 문제 질문드립니다.https://www.acmicpc.net/source/share/7c68255b14c740b9b87c4053d0d0c0db왜 자꾸 틀렸다고 하는지 모르겠네요 ㅠ 강의 듣고 사이즈 예외처리까지 다 된건 줄 알았는데 if ((input.find(temp1) != string::npos) && (input.find(temp2) != string::npos)) { cout << "DA" << '\n'; } else { cout << "NE" << '\n'; }이 부분이 왜 오류나는지 알 수 있을까요? 감사합니다.
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준 13023 질문있습니다.
문제의 의도가 파악이 되지 않아 질문 남깁니다.모든 노드에서 DFS를 돌리는경우도 유튜브 채널 댓글 보면서 이해를 했습니다.위의 설명을 보니 이해가 바로 되었습니다.근데 문제에서 A는 B와 친구다.B는 C와 친구다.C는 D와 친구다.D는 E와 친구다.라는 것을 보고 깊이가 4일 때를 하드코딩으로 코드에 넣으셨는데 저는 이것을 보고 그냥 DFS로 n -1번까지 다 연결되어 있으면 1을 출력하라는 것이구나~ 하고 이해를 하였는데 어디에 근거하여 깊이가 4인 경우가 발생하면 1을 출력하라고 어떻게 이해하셨는지 궁금합니다. #include <iostream> #include <vector> #include <queue> #include <algorithm> #include <deque> #include <cmath> using namespace std; #define ll long long #define endl "\n" int n; bool flag = false; vector<vector<int>> adj; vector<bool> visit; void DFS(int now, int depth) { visit[now] = true; if (depth == n - 1) { flag = true; return; } for (int next : adj[now]) { if (visit[next] == false) DFS(next, depth + 1); } visit[now] = false; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int m; cin >> n >> m; adj.resize(n); visit.resize(n); for (int i = 0; i < m; ++i) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } for (int i = 0; i < n; ++i) { DFS(i, 0); if (flag) break; } if (flag == false) cout << 0; else cout << 1; return 0; }위는 제가 처음에 짠 틀린 코드입니다. DFS의 조건문에서 depth가 n - 1과 같으면 flag를통해 return하도록 하였습니다.
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
LosdShaderFromFile 매개변수 string(2)
삼각형 띄우기 31분 쯤 나오는 LosdShaderFromFile함수 작성시에 저는 string 헤더 추가하라고 오류가 뜹니다. (물론 추가 하는게 문제는 아닌데,) 선생님께서 올려주신 파일을 보니 별도로 추가 되어있지 않아서요,,,, 궁금해서 올려봅니다(너무 하찮은 질문이지만...ㅜㅜ ) 근데 using namespace std; 는 이미 pch에 저도 추가되어 있습니다...ㅠㅠㅠ선생님 파일을 받아서 열어보아도 저와 같이 오류가 뜹니다. 저는 현재 VS 2022를 쓰고 있습니다. VS 설정이나 기타 확장도구, 템플릿 등의 문제일까요? ㅜㅜ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
실행(F9)을 하면 자꾸 응답없음이 뜹니다.
sasm 삭제하고 다시깔아봐도 헬로월드 실행이 안되네요.. 무슨 문제일가요? 자꾸 응답없음이 뜹니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
긍정왕 홍철이 문제 질문입니다.
문제를 보고 아래와 같이 풀었으나// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; const int n = 3; //4방향 이동 int dy[4] = { -1, 0, 1, 0 }; int dx[4] = { 0, 1, 0, -1}; int visited[n][n]; vector<int> v; //기본 맵 int a[3][3] = { {10,20,21}, {70,90,12}, {80,110,120} }; void print() { for(int i : v) { cout << i << " "; } cout << "\n"; } // 완탐 재귀 함수 void go(int y , int x) { //기저 조건 if( y == n-1 && x == n-1 ) { print(); return; } for(int i = 0; i < 4; i ++) { int ny = y + dy[i]; int nx = x + dx[i]; //범위 체크 if( ny < 0 || ny >= n || nx < 0 || ny >= n ) continue; if( visited[ny][nx] ) continue; visited[ny][nx] = 1; //방문 처리 v.push_back(a[ny][nx]); go(ny, nx); visited[ny][nx] = 0; //원복 v.pop_back(); } } //완탐과 원복 : 예제_ 긍정왕 홍철이의 구걸 여행행 int main() { visited[0][0] = 1; v.push_back(a[0][0]); go(0,0); return 0; } 출력이 위와 같이 0이 껴서 이상하게 나옵니다. 큰돌님 코드와 비교해 봤는데 다른 점을 못찾겠어요ㅜㅜ 제가 실수한 것이 있을까요??
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
[질문은 아니고 해결법&코드 공유] deque로 풀어봤어요!
저는 37번 LRU 문제를 Deque랑 삽입 정렬로 풀었습니다.삽입 정렬은 강사님 설명대로 반복된 입력값을 정렬시킬 때 사용했습니다. deque는 캐시메모리 크기를 초과할 때 pop(제거)를 위해 사용했습니다. 처음에는 vector로 풀었는데, 이럴 경우입력값 : 1 2 3 2 6 2 3 5 7index :0 1 2 3 4vector<int> v :1 6 2 3 5에서 처음 입력됐던 1이 삭제돼야하는데, vector는 pop_back()만 있어서 앞쪽인 1이 아니라 뒤쪽인 5가 삭제됩니다. 그래서 pop_front() 혹은 pop_back()랑 push_front가 동시에 컨테이너가 없을까 찾아보다가, 양방향 입력/제거 가능한 deque를 사용했습니다!(queue도 앞으로 들어오고 뒤로 나가는 거지만 정렬하기 힘드니까 패스!) 아래 코드 첨부합니다!최근에 해시 공부하면서 익힌 iterator(반복자)도 사용했는데, iterator가 처음이신 분들은 대충 index처럼 요소 접근하는걸로 이해해주시면 됩니다!(정확히는 주소 접근이지만!) #include<iostream> #include<deque> #include<algorithm> using namespace std; int main() { int S{}, N{}; deque<int> dq; // 중복 값 정렬 cin >> S >> N; for (int i = 0; i < N; i++) { int tmp{}; cin >> tmp; // 중복값 찾기 deque<int>::iterator it = find(dq.begin(), dq.end(), tmp); if (it == dq.end()) dq.push_front(tmp); // 중복 없으면 그냥 앞에서 삽입 else { // 중복값 있다면 // (tmp = *it을 할 필요없음 : 그 값이 그 값이니까) // 하나씩 뒤로 밀기. 제일 앞쪽에 도착하면 it-1을 못하니까 반복 종료 for (it; it != dq.begin(); it--) { *it = *(it - 1); } *it = tmp; } // 제일 뒤쪽 삭제 if (dq.size() > S) dq.pop_back(); } for (int i = 0; i < dq.size(); i++) cout << dq[i] << " "; }
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
답변을 안 주셔서 리마인드 성격의 인용글 올립니다.
확인 부탁드립니다.https://www.inflearn.com/questions/1115271/%EC%84%B9%EC%85%9810-rawbuffer%EC%9D%98-result%EB%B2%84%ED%8D%BC-%EC%83%9D%EC%84%B1%EC%8B%9C-%EC%A7%88%EB%AC%B8
-
미해결홍정모의 따라하며 배우는 C++
IntArray 구현 공유합니다
copy constructor, = operator overloading, << overloading 도 같이 해봤습니다insertBefore, remove 에서 resize 를 쓰면 코드 반복을 줄일수 있는데, 비슷하게 옮기는걸 두번해서 속도 느려지기 때문에 그냥 각 함수에 기능들을 따로따로 만들었습니다...class IntArray{ private: int _len; int *_arr = nullptr; public: IntArray(int length) : _len(length) { _arr = new int[length]; } // initializer_list constructor IntArray(const std::initializer_list<int> & ilist) : IntArray(ilist.size()) { int i = 0; for (const auto & n : ilist) { _arr[i++] = n; } } // copy constructor IntArray(const IntArray &source) : IntArray(source._len) { for(int i = 0; i < _len; i++){ _arr[i] = source._arr[i]; } } // assignment operator overloading IntArray& operator = (const IntArray & source) { // prevent self-assignment if (&source == this) return *this; _len = source._len; delete[] _arr; if (source._arr == nullptr) { _arr = nullptr; } else { _arr = new int[_len]; for(int i = 0; i < _len; i++){ _arr[i] = source._arr[i]; } } return *this; } // cout << overloading friend std::ostream& operator << (std::ostream &out, const IntArray &intarray) { out << "[ "; for(int i = 0; i < intarray._len; i++){ out << intarray._arr[i] << " "; } out << "]"; return out; } void reset(){ _len = 0; delete[] _arr; _arr = nullptr; } void resize(int newlen) { int *newarr = new int[newlen]; int minlen = std::min(_len, newlen); for(int i = 0; i < minlen; i++){ newarr[i] = _arr[i]; } delete[] _arr; _arr = newarr; } void insertBefore(const int &val, const int &ix) { _len++; int *newarr = new int[_len]; for(int i = 0; i < ix; i++){ newarr[i] = _arr[i]; } newarr[ix] = val; for(int i = ix+1; i < _len; i++){ newarr[i] = _arr[i-1]; } delete[] _arr; _arr = newarr; } void remove(const int &ix) { _len--; int *newarr = new int[_len]; for(int i = 0; i < ix; i++){ newarr[i] = _arr[i]; } for(int i = ix; i < _len; i++){ newarr[i] = _arr[i+1]; } delete[] _arr; _arr = newarr; } void push_back(const int &val){ resize(++_len); _arr[_len-1] = val; } ~IntArray() { delete[] _arr; } };
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 1629 홀수 일 때의 처리가 이해가 되지 않습니다.
#include <bits/stdc++.h> using namespace std; long long A, B, C; long long go(long long a, long long b) { if (b == 1) { return a % C; } long long ret = go(a, b / 2); ret = (ret * ret) % C; if (b % 2 == 1) { ret = (ret * a) % C; } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> A >> B >> C; cout << go(A, B) << '\n'; }B가 홀 수 일 때, 홀수 처리를 하기 직전ret = A^(B-1) % C 입니다.그러면 홀수처리가 진행 될 때ret = ((A^(B-1) % C) * A) %C 가 코드의 상황 인데 이게 최종 결과인 A^B % C 와 같아지는게 이해가 안됩니다. 나머지 연산의 합동공식이(a * b) % c = (a % c * b % c) % c 이기 때문에 A^B % C= (A^(B-1) * A) % C= (A^(B-1) % C * A % C) % C위와 같은 식이 나와야 하고 ret = (ret * a) % C가 아니라ret = (ret * a % C) %C 가 되어야 하는 것 아닌가요? 백준에서는 둘다 맞게 처리 되는데 이해가 되지 않습니다.
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
섹션 3. 포인터와 배열 (3주차) 배열 실습까지 진행했는데요
저는 코드를 똑같이 따라 했다고 생각했는데 오류가 납니다.파일 올려주신다고 했는데 어디서 다운 받을 수 있나요? https://youtu.be/7Tk8ocwMO7Q
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
반년넘게 C#해도 이해라는게 도저히 안갔는데
C++하니까스택이고 힙이고 참조고 이해가 됩니다진짜 왜 C#을 먼저했을까요? 감사합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 질문입니다
http://boj.kr/f816b7f59d3247c7958683ceae5d6b76선생님 안녕하세요.모든 경우의 수 마다 구역을 색칠해서 dfs가 2번호출되면 최솟값을 갱신하는 로직으로 짰습니다.테스트케이스는 다맞는데 왜 틀리는지 이유를 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p107
if(mp.find(1) == mp.end())이런 반복문 조건이 나오는데요 mp[1]을 할당하지 않기 위해서 이렇게 조건을 쓰신것 같은데요 조건식같은경우는 일단 할당된것이 하나밖에 없으니깐 처음과 끝이같다 그래서 참이다가 맞나요?그런데 그렇게되면 할당을 한것이랑 똑같지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p106 질문
cout << mp[1] << '\n'; cout << mp2["aaa"] << '\n';이 코드에서요 위의 코드는 key에 1 값에 0을 저장하는 것은 알겠습니다.그리고 두번째 코드에서도 key에 aaa까지는 알겠는데 코드 실행결과를 보면 값이 %가 나와있습니다. 왜 그렇게 값이 나오는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p104
mp.erase("kundol"); auto it = mp.find("kundol"); if(it == mp.end()){ cout << "못찾겠네 꾀꼬리\n"; } 이 코드결과 "못찾겠네 꾀꼬리"가 실행이 되는데요 제 생각에는 kundol을 erase 했으니 mp에 find를 실행하면 kundol이 없으니깐 0을 반환해서 it이 0이되고 그리고 mp.end는 지금 key값이 3개가 있으니 인덱스값이 2가되서 if반복문이 실행이 안되야하는거 아닌가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p100 erase() 질문
auto it = a.begin(); it++; a.insert(it, 1000); print(a); it = a.begin(); it++; a.erase(it); print(a); 강의교재를 보시면 이러한 코드가 나오는데요 저 코드를 실행한 결과는 3 1000 2 1 1 2 3 3 2 1 1 2 3이렇게 나오는데 결론적으로 1000이 사라졌습니다.하지만 제가 생각하기에 첫번째 auto it 에서 it++때문에 it= a.begin() +1이 되고 4번째 코드에서는 원래에 있던 it에 다시 it++를 하니 it = a.begin() + 2가 되는것이 아닌가요? 그래서 3 1000 2 1 1 2 3 여기에서 처음에 나오는 2를 삭제해야하는것이 아닌가요?