https://www.acmicpc.net/source/86932466 질문 : 제 컴퓨터에서는 실행시간이 7초 걸립니다. 처음에 무식하게 풀었습니다. 반례를 생각하기 위해 최대 숫자인 1만을 넣었습니다. 시간이 오래걸렸습니다. 무려 7초. 그런데 문제에서 요구하는 시간은 2초. 잘못된 풀이였구나 넘어갔습니다. 그런데 도저히 도저히 안되어서 강의를 봤습니다. 제 컴퓨터에서 7초가 걸리는 강사님 코드도 제가 무식하게 푼 코드도 백준 제출을 하니 되더라구요. 허탈한 마음과 충격에 질문을 남깁니다. 컴퓨터를 껐다 키고 바로 실행시켜도 저런데 왜 저런 걸까요? 요구시간이 2초이면 c++ 기준 초당 2~3억회 연산을 처리하니 대충 4억 미만 안에 연산이 끝날 것 같으면 자신있게 백준에 제출을 해야할까요? 횡성수설 해서 죄송합니다. 좋은 강의 늘 감사합니다. p.s 첫 질문 드림. 블로그도 잘 보고 있습니다. CS 면접강의도 듣고있습니다. 단톡에도 있습니다. 어비스 화이팅!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님! 강의를 보던중 제가 아는 지식이 이곳에 적용이 되는지 궁금해져서 질문을 남겨놓습니다. 2주차 개념 4-1 인접행렬 8:00 경에 x(순회할때 j)를 중심으로 보는것보다 y(순회할때 i)를 중심으로 보는 것이 더 좋고 그 이유가 행별로 캐싱이 된다고 하셨는데요! 이때 y(순회할때 i)를 선택하는 것이 더 좋은 이유가 자세히 생각했을 때 데이터 지역성 때문에 그런것인지 의문을 가지게 되어 질문을 남겨보아요!
안녕하세요 이제 큰돌님 강의를 듣기 시작한 취준생입니다. 일단 0주차부터 순서대로 강의를 듣고있었는데 0주차의 재귀함수듣고 순열 듣다보니 이 내용이 교안 앞부분에도 없고 뭐지 하면서 일단 들었는데 교안을 쭉 다시 보니 뒤쪽에 있더군요. 이 강의를 들으며 학습을 시작하기 전에 C++과 자료구조 내용이 들어있는 알고리즘 교안을 혼자서 모두 익힌 후에 강의를 듣기 시작하면 되는거고 다른 알고리즘_개념교안 이라고 되어있는 자료가 강의들으면서 참조하는 자료인건가요? 0주차에 있는 개념 내용들은 교안에 있는 부분중 영상이 필요하다고 생각된 부분을 보충하신거라고 생각하면 될까요?
1.Subsystem은 plugin에만 넣어서 사용할 수 있나요? 아니면 기본프로젝트에서도 사용가능한가요? 2.같은 부모를 상속 받는 Subsystem을 여러개 만들수 있나요? 예: UGameInstanceSubsystem를 상속받아서 MyASubsystem, MyBSubsystem 이렇게 여러개 생성해서 사용해도 문제 없을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래 코드가 틀렸다고 나오는데 ll r = 1e18 + 4; 이 부분 코드를 1e9로 바꿔서 제출하기만 하면 맞다고 나옵니다. 상한선을 저번에 풀었던 드래곤 앤 던전 문제처럼 크게 잡았는데 왜 문제가 생겼는지 모르겠습니다. 시간초과가 나온거면 이해가 가는데 왜 틀렸다고 나오는지 이해가 안가네요.. #include <bits/stdc++.h> using namespace std; typedef long long ll; ll x, y, z, mid, ret; bool check(ll mid) { ll new_z = (y + mid) * 100 / (x + mid); // 새로운 승률 return new_z > z; // 기존 승률과 비교 } int main() { cin >> x >> y; ll l = 1; ll r = 1e18 + 4; // 최대 범위를 현실적으로 설정 z = y * 100 / x; // 기존 승률 ret = 0; while (l <= r) { mid = (l + r) / 2; if (check(mid)) { // 승률이 증가하는 경우 ret = mid; r = mid - 1; // 더 작은 mid 값을 탐색 } else { // 승률이 증가하지 않는 경우 l = mid + 1; // 더 큰 mid 값을 탐색 } } if (ret == 0) cout << -1; else cout << ret << "\n"; return 0; }
안녕하세요. 큰돌강사님~ 순열이나 조합을 재귀함수로 구현할 때 변경을 적용한후 DFS진입합니다. DFS를 빠져나오고 나서는 변경사항을 다시 원복시키는 코드 패턴이 보여지는데 (즉, push_back() => dfs => pop_back() ) 이에 대한 알고리즘 용어가 따로 있는지 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 312 ->321 입니다. 강의 항상 감사합니다~
안녕하세요 큰돌님! 문풀 강의를 보기전에 구현을 먼저 해보고 강의를 시청했습니다. 나름대로 문제 풀이 방식(sudo code)를 만들어서 문제를 풀고 잘 풀었다고 생각했는데 큰돌님의 풀이를 보고 비교해보니 난잡한 풀이라고 생각하게 되었어요. 알고리즘을 풀 때 어떻게 생각해야 간결하게 정확한 전략을 세울 수 있을까요...? 문제를 풀 때 큰돌님의 생각루틴과 제 코드에 대한 피드백이 궁금합니다! http://boj.kr/833f44e07f3640228c53b006c8bf0ee5
http://boj.kr/ad36bd7f8ec04337b4e4eb98ed2ecdfc 이 코드는 틀린 코드이고 http://boj.kr/8494f1ca7ca84fbeaa1cd47409006e9f 이 코드는 맞은 코드인데요. 둘의 차이는 combi(0)으로 시작하냐 combi(-1)로 시작하냐입니다. 근데 combi(-1)은 for (int i = start + 1; ...) 로 하고 combi(0)은 for (int i = start; ...) 해서 결국 똑같은 코드 아닌가요? 왜 combi(0)으로 하면 답이 안나오는지 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 이 문제를 재귀를 이용해서 풀어봤는데 인덱스를 포함하는 경우에서 temp_v 배열에 인덱스를 포함해서 보내는 경우는 어떻게 하는건가요?? (요 부분) // 현재 인덱스를 포함하지 않는 경우 go(idx + 1, p, f, s, v, sum, temp_v); // 현재 인덱스를 포함하는 경우 go(idx + 1, p + a[idx].p, f + a[idx].f, s + a[idx].s, v + a[idx].v, sum + a[idx].c, temp_v); #include <bits/stdc++.h> using namespace std; const int INF = 987654321; int n, mp, mf, ms, mv; int ret = INF; map<int, vector<vector<int>>> ret_v; // 비용별 조합 저장 struct A { int p, f, s, v, c; } a[16]; void go(int idx, int p, int f, int s, int v, int sum, vector<int> temp_v) { // 모든 재료를 확인한 경우 if (idx == n) { // 최소 조건 만족하는지 확인 if (p >= mp && f >= mf && s >= ms && v >= mv) { if (ret > sum) { ret = sum; // 최소 비용 갱신 ret_v[ret].clear(); // 이전 조합 제거 ret_v[ret].push_back(temp_v); // 새로운 조합 저장 } else if (ret == sum) { ret_v[ret].push_back(temp_v); // 같은 비용의 다른 조합 저장 } } return; } // 현재 인덱스를 포함하지 않는 경우 go(idx + 1, p, f, s, v, sum, temp_v); // 현재 인덱스를 포함하는 경우 go(idx + 1, p + a[idx].p, f + a[idx].f, s + a[idx].s, v + a[idx].v, sum + a[idx].c, temp_v); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // 입력 받기 cin >> n >> mp >> mf >> ms >> mv; for (int i = 0; i < n; i++) { cin >> a[i].p >> a[i].f >> a[i].s >> a[i].v >> a[i].c; } // 탐색 시작 go(0, 0, 0, 0, 0, 0, {}); // 결과 처리 if (ret == INF) { cout << -1 << '\n'; // 조건 만족하지 못하는 경우 } else { sort(ret_v[ret].begin(), ret_v[ret].end()); // 사전순 정렬 cout << ret << '\n'; // 최소 비용 출력 for (int idx : ret_v[ret][0]) { // 첫 번째 조합 출력 cout << idx << " "; } cout << '\n'; } return 0; }
Cosmetic#1 강의 중 22분경에 CharacterPart에 대한 정보 단위를 'List'와 'Entry'로 나누는 이유에 대한 질문입니다. 언리얼 네트워크에 Array의 수정사항을 요청할때, Array 전체를 보내는 것이 아닌 수정된 Array의 일부분만 요청해서 수정할수있게하는게 "Network Serialize Array 문법"이라고 하셨는데요. 이 부분에 대해서 구글링 해보려하는데 정보를 찾을수가 없어서 혹시 참고할만한 링크 부탁드려도 될까요???
http://boj.kr/5a9e690ac2f24bc3bdd728d4be9a82e9 큰돌님 제가 작성한 코드로는 . (예제 입력1 의 7번 "공백.") 이걸 입력하면 .이 출력 되면서 .이 왜 출력되는지 모르겠고 어디 부분이 잘못된 것인지도 모르겠습니다. 코드가 잘못된 부분 조언 부탁드립니다 !
std::set은 레드블렉 트리로 구현하여 삽입, 삭제, 검색 모두 O(logN)인걸로 알고있습니다. 이분 탐색도 시간 복잡도가 O(logN)인데 왜 std::set을 사용하면 더 느린지 궁금합니다. 아래는 풀이 소스코드입니다. #include <bits/stdc++.h> using namespace std; int32_t t, n, m, tmp; set<int32_t> s; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> t; while (t--) { cin >> n; s.clear(); for (int32_t i = 0; i < n; ++i) { cin >> tmp; s.emplace(tmp); } cin >> m; for (int32_t i = 0; i < m; ++i) { cin >> tmp; if (s.contains(tmp)) { cout << "1\n"; } else { cout << "0\n"; } } } return 0; }