묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결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% 시간초과가 뜨는데 어떻게 최적화를 해야할까요..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 응용 질문있습니다 :)
안녕하세요 선생님 🙂 이 문제에 숨바꼭질 2번의 가장 빠른 시간으로 동생을 찾는 방법의 수와 숨바꼭질 4번의 이동 경로를 출력하는 방법을 넣어보고 싶어서 응용을 해봤습니다. http://boj.kr/140dd82426b947a59d51672a9bda4d0a 가장 빠른 시간으로 동생을 찾는 방법의 수를 출력하는 로직이 올바르게 짜여있는 것인지 궁금합니다. int prv[2][500004]; for (int i = K; i != N; i = prv[cnt%2][i]) { vec.push_back(i); //cnt--; } vec.push_back(N); reverse(vec.begin(), vec.end()); for (const auto& v : vec) { cout << v << " "; }prv배열을 2차원으로 했을 때, 1, 10을 입력하면 올바른 값이 나오지만 5, 17과 17, 5는 출력 자체가 되지 않습니다. prv배열을 1차원으로 했을 때는 5, 17과 17, 5는 출력이 되지만(5, 17만 올바른 값 출력) 1, 10은 출력 자체가 되지 않습니다. 혹시나 해서 for문에 cnt--를 넣어봤지만, 제대로 출력되던 1, 10조차 출력 자체가 되지 않았습니다. 이유와 해결방법이 궁금합니다.17 -> 16, 15, 14, 15 5 -> 6, 8, 11, 15위의 경우처럼 중복되는 경로가 있는 경우는 17 16 15까지만 출력이 됩니다. 14가 출력되지 않는 이유는 16 뒤에 출력되는 15가 첫번째 방문하는 15가 아닌 마지막 15를 방문해서 그런걸로 이해했는데 제대로 이해한게 맞을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 질문있습니다 :)
안녕하세요 선생님 🙂 헷갈리는 부분이 있어서 질문 드립니다.http://boj.kr/4218885d4f8c48ae84582162f1d262f0 55번째 줄 while 문 안의 아래 if문을 사용하는 이유를 모르겠습니다.if (visited[cnt % 2][K]) { flag = true; break; } /* 17 -> 16, 15, 14, 15 5 -> 6, 8, 11, 15 */수빈이가 동생이 방문할 곳을 미리 방문할 경우에 왔다갔다 하는 부분을 구현한 것이라고 설명해주셨는데요, 로직은 이해가 됩니다. if (nx == K) { flag = true; break; } /* 17 -> 16, 15, 14, 15 5 -> 6, 8, 11, 15 */하지만, 위의 (17, 5)라는 입력 값만 생각했을 때는 78번째 줄의 nx = K일 경우에 반복문을 빠져나가는 로직으로도 충분히 정답을 도출해낼 수 있기 때문에, 55번째 줄의 조건이 필요한 이유를 모르겠습니다. 혹시 제가 놓치고 있는 개념이나 반례가 있을까요? 이러한 경우가 있을지는 모르겠지만 17 -> 16 -> 15 -> 14 -> 15 -> 16 -> 15같이 15를 3번 왔다갔다 해야하는 경우가 있다면, 55번째 줄과 78번째 줄 모두 정답을 도출해낼 수 없습니다. 이건 너무 많이 간거죠..?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-J 질문있습니다.
http://boj.kr/d4a41da7d56b4acfa374613ed7723eeb비트마스킹을 사용하지않고 무식하게 풀어보았는데 vscode에서는 계속해서 segmentation fault 오류가 나오고 백준에서는 메모리 초과가 뜹니다.이렇게는 해결이 어려울까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-L 재귀함수 질문이에요
http://boj.kr/3bb8f4f305654583be23c4a1f1aac037코드가 거의 큰돌님이 작성해주신거랑 로직이 비슷한데 왜 제가 작성한 코드는 시간초과가 발생하는지 모르겠습니다.
-
미해결홍정모의 따라하며 배우는 C++
C++ 문법 공부 이후
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 교수님.C++ 문법 공부 이후에 프로그램을 만들어보고 싶은데요제가 '업무 자동화 프로그램'을 만들어보고 싶은데, 이를 하려면 무엇을 공부해야 할까요? 제가 찾아본 것은 winapi, MFC 등을 공부해보라는 것을 찾았는데, 이 내용이 좀 그동안 봤던 코드들이랑 너무 이질적이라 제가 접근하기에 어렵더라구요. 이 방법에 대해 교수님께서 좀 알려주시면 정말 감사할 것 같습니다! 또 좋은 책이나 참고자료가 있다면 알려주시면 감사합니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-X 질문있습니다
int go(int here, int yamyam, int capacity){ if(here == m) return 0; int &ret = dp[here][yamyam][capacity]; if(ret) return ret; ret = max(ret, go(here + 1, yamyam, c)); // <--- 이부분 for(int i = 0; i < n; i++){ bool isbeforeYAM = (1 << i) & yamyam; bool isYAMCAN = (capacity - a[i]) >= 0; if(!isbeforeYAM && isYAMCAN)ret = max(ret, go(here, yamyam | (1 << i), capacity - a[i]) + 1); } return ret; }이 go라는 메소드에서 ret = max(ret, go(here + 1, yamyam, c)); 이 이해가 가지 않습니다.다음 가방으로 넘어가는데 왜 현재의 (가방, 보석, 용량) 에 값을 저장하나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-h 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. https://www.acmicpc.net/submit/4659/85159031안녕하세요. 선생님 문제를 푸는 와중에 예시 답안은 맞는데 제출하면 틀렸다고 하는데 어떤 부분이 틀렸는지 잘 모르겠습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다 :)
안녕하세요 선생님 🙂 오랜만에 질문드리는 것 같습니다 ㅎㅎ 사실 이 문제에서 모르는 부분이 있는 것은 아니지만, 별거 아닌 실수로 인해서 발생한 부분에 의문이 생겨서 질문 드립니다. 실수로 visited배열을 전체 초기화가 아닌 54 * 54만큼만 INF로 초기화시켜주었습니다. 테스트케이스는 4 * 4 배열인데요, 실수를 했어도 테스트케이스의 범위는 지켰기 때문에 결과 값이 정상적으로 나와야 한다고 생각합니다. 하지만, 테스트케이스의 결과 값이 "IMPOSSIBLE"로 출력이 됩니다. 이유가 뭘까요..?? http://boj.kr/b731d2b778284e37b9aa54fb079a30ba
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5 - G 투포인터 low,high 시작 위치 질문
http://boj.kr/0078fb786ad54f33b71c760f7301177f우선 보았을 때, 저는 low를 0 high를 a.size()로 두었습니다. 그리고 아래와 같은 로직으로 짰는데, 시간 초과가 나더라구요... 일반적으로 실행해도 감소만 시키느라 답변이 나오지더 않더라구요.low, high를 처음에 두신 이유가 있으신지 궁금합니다! ll l = 0, r = a.size(); while (l != r) { ll sum = 0; for (ll i = l; i < r; i++) sum += a[i]; if (sum < n) { l++; } else if (sum > n) { r--; } else if (sum == n) { l++; ret++; } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5 - E 풀이까지 가는 생각
항상 그리디가 어려웠는데 오랜만에 풀어보니 답은 맞는데, 뭔가 이게 맞나라는 생각이 너무 들어서 생각 흐름이 맞는지 질문드립니다!블로그에 개인적으로 정리한 글이라 반말인점 무시해주시면 감사하겠습니다 ㅠ 무식하게 하기엔 범위가 10만이고 범위가 존재해서 그리디가 생각났다. 우선, 위 사진처럼 생각해봤다. 순서 정렬은 start 시간 기준으로 하는게 맞다. 왜냐하면 회의 시간이 짧은 걸로 sort 하면 100000에 시작하고 100001로 끝나는 게 처음에 배치되기 때문이다. 끝도 의미가 없으니 시작으로 순서 정렬을 잡았다.그럼 어떤 예외가 있을까 싶었는데 사진의 맨 위에 엄청 긴 선 같은 부분이 문제다. start가 가장 작으니 배열의 처음에 위치하기 때문이다. 따라서if (prev_s < s && e < prev_e)위와 같이 이전 값의 사이에 현재 해당 값이 존재하면 (이전 = 긴 선, 현재 = 긴 선 다음으로 start가 빠른 선) 면적은 줄지만 다른 회의가 잡힐 공간 자체는 늘어나게 되니 무조건 이득인 것이다. 따라서 저럴 땐, 이전 친구를 pop해주고 현재 친구를 push 해줬다.이외에 이전의 끝과 현재의 시작이 겹치거나 더 크면 회의실을 잡을 수 있으니 push 해준다. 반대의 경우는 회의중이기 때문에 회의실을 잡지 못하기 때문에 따로 push 해주지 않는다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문있어요
http://boj.kr/5bd8b854c5154aa3bebd77b37b07b8a1시간복잡도는 O(n*comp)으로 보이고 메모리도 넘지 않는 것 같은데 예제들은 정상 작동하면서 제출할때는 틀렸다고 나옵니다. 반례가 무엇인지 도저히 모르겠습니다.
-
해결됨[초급] QML 프로그래밍 2편
TableView에서 ImplicitWidth, ImplicitHeight와 일반 width, height의 차이가 궁금합니다.
안녕하세요.TableView의 예제에서 ImplicitWidth와 ImplicitHeight 대신 width, height를 그냥 사용하였더니, Rectangle의 사이즈가 설정해준 값을 유지하지 못하고 그 보다 작은 정사각형 형태로 실행되어버리네요.혹시 Component 내에서 Rectangle 사용 시에는 Implicit를 width와 height에 꼭 붙여서 사용해야 하고, 일반 width와 height는 사용하면 안되는 걸까요?
-
해결됨[초급] QML 프로그래밍 2편
GridView에서 Padding과 Margin의 차이가 있을까요?
안녕하세요.GridView 예제에서 topPadding과 같이 Padding을 통해 간격을 설정하는 거 같던데, Margin을 사용하는 것과 차이가 있는걸까요?
-
해결됨[초급] QML 프로그래밍 2편
ListView에서 currentIndex 작동안됩니다.
안녕하세요.ListView의 예제에서 currentIndex: 50 으로 두고 실행시켜보아도 실행 시 시작은 항상 0에서 시작합니다.currentIndex: 50이면 실행 직후 창에 보이는 시작 인덱스가 0이 아닌 50에서 시작할 거 같은데 맞을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-B 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #include <bits/stdc++.h> using namespace std; int n,m, visited[51][51], ret = 0; char a[51][51]; const int dy[] = {-1,0,1,0}; const int dx[] = {0, 1,0,-1}; void bfs(int y, int x){ queue<pair<int,int>> q; memset(visited, 0, sizeof(visited)); visited[y][x] = 1; q.push({y,x}); int cnt = -1; while(q.size()){ tie(y,x) = q.front(); q.pop(); for(int i =0; i< 4; i++){ int ny = y + dy[i]; int nx = x + dx[i]; if(ny < 0 || nx < 0 || ny >= n || nx >= m || a[ny][nx] == 'W' || visited[ny][nx]) continue; visited[ny][nx] = visited[y][x] + 1; q.push({ny,nx}); ret = max(ret, visited[ny][nx]); } } return; } int main(){ cin >> n >> m; for(int i =0; i<n; i++){ for(int j =0; j <m; j++){ cin >> a[i][j]; } } for(int i =0; i<n; i++){ for(int j =0; j <m; j++){ if(a[i][j] == 'L' && visited[i][j] == 0){ bfs(i,j); } } } cout << ret-1 << "\n"; return 0; }안녕하세요 선생님 제가 풀었던 문제인데 if(a[i][j] == 'L' && visited[i][j] == 0){ bfs(i,j); } visited[i][j] == 0 이분분 때문에 자꾸 틀렸다고 나옵니다. 생각 해봐 없어서 되긴 하지만 있었도 문제가 없지 않나요?
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker&Liu)
부록 강의를 듣지 않아도 수료증을 받을 수 없을까요?
안녕하세요, 강의를 결제 후 완강하여 수료증을 제출해야 하는 상황입니다.그런데 보니 부록 강의가 30시간이 넘는데도 불구하고, 해당 강의를 완강하지 않으면 수료증이 나오지 않는 것 같아요.커리큘럼에 필수적인 내용이 아니라면, 부록 강의를 듣지 않아도 수료증을 발급 받을 수 없을까요?감사합니다.