안녕하세요, 시간초과로 통과하지 못해서 질문드립니다. http://boj.kr/c89e043975f349bbb7a4066422235fc0 이전에 단순히 dfs만 써서 풀었을 때와 로직은 동일합니다. 다만 이번엔 visited를 2차원 벡터가 아닌 int형 변수 하나로 처리했고 방문하는 경우엔 | 연산으로 비트를 켜줬고 방문을 마치고 나선 & ~(1<<idx) 와 같이 비트를 꺼줬습니다. 선생님의 코드와 제 코드의 함수 호출을 비교해보니 예제의 경우에선 함수 호출 횟수도 동일했습니다. 그런데 시간초과가 생기는 이유는 무엇일까요?
애니메이션 강의를 듣던 도중 T-Pose의 Global->Local 행렬에서 Animation-Pose의 Local->Global 행렬을 곱해주어 Vertex의 좌표를 애니메이션 기준으로 바꾸어 주는 부분이 이해가 가지않아 질문드립니다. 가장 마지막줄인 invGlobal이 T-Pose의 Global->Local 행렬이고 tempAnimBoneTransforms[b]가 Animation-Pose의 Local->Global 행렬인데 저 두 행렬에 어떠한 상관관계도 없다고 생각되는데 단지 이렇게 곱해주기만 한다고 해서 T-Pose의 Global이 어떻게 Animation-Pose의 Global로 변환이 될 수 있나요? 제가 이러한 의문을 제기하는 이유은 두가지 입니다. 1. 두 행렬이 동일한 Bone을 기준으로 변환이 되는 행렬들이라고 해도 Animation-Pose에서는 그 Bone이 움직여서 만들어진 행렬이기 때문에 동일한 좌표계라고 생각할수 없다. 2. 지금까지 T-Pose의 Local->Global 또는 Animation-Pose의 Local->Global로 변환이 되는 행렬들은 전부 자신과 부모간의 계층구조에 의해서 좌표값이 상대적으로 구성된 아이들이였는데 사진에서 나온 InvGlobal과 tempAnimBoneTransforms[b]는 계층관계도 있지 않습니다. 글이 길어서 죄송합니다 계속 생각해봐도 잘 이해가 가지 않아 질문드립니다.ㅜ
http://boj.kr/3aa1410045524133b6e2b5ea6da1bcce 현재 해당코드를 통해서 정답은 맞췄는데 제가생각했던건 MID-1, MID+1로 조건탐색을하고 left <= right 조건을 통해서 left가 조건탐색이 끝났을때 기준으로 left가 정답이라고 생각하고 이때 left가 max조건을 넘겨버리면 체크하는걸로 해결했는데 설명코드에서 mid를 ret으로 체크되는부분이 잘 이해가가지않아 질문을남깁니다 항상감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의잘 보고 있습니다. 저는 다음과 같이 코드를 작성을 했는데 전역변수를 사용하지 않은 코드에서 백트래킹조건을 어디에 적어주어야 하는지 알 수 없어서 질문드립니다. 그리고 제가 재귀함수에 익숙치 않은 상태인데 재귀함수를 학습하는 방법에 대해서도 알려주실 수 있으신가요? 제가 부족해서 교안이나 강의에 해주신 설명으로는 이해하는데 어려움을 겪고 있습니다. 답변 감사합니다. int go(int idx, int sum, int mx, int n, int * a) { if (idx == n) { cnt++; return mx; } int with_item = go(idx + 1, sum + a[idx], max(mx, sum % 11), n, a); int without_item = go(idx + 1, sum, mx, n, a); return max(with_item, without_item); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n = 10; int a[] = {24, 35, 38, 40, 49, 59, 60, 67, 83, 98}; cout << go(0, 0, 0, n, a) << "\n"; cout << cnt; return 0; }
안녕하세요 큰돌선생님 히든퀘스트 백준 10844 쉬운계단수 문제를 바텀업 방식으로 풀었습니다. http://boj.kr/1674b847244b43b2b1d5538557a76865 로직에서 틀린부분이 없는것 같은데 바로 틀렸다고 나오는데 혹시 어느 부분이 잘못된것일까요? 0과 9일때의 값을 조건문으로 처리하지 않기 위해 양쪽 인덱스를 하나씩 늘리고 0을 넣은 로직입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘보고 있습니다. 저는 이 문제를 아래와 같은 코드로 해결이 가능하다고 생각했는데 현재 출력조차 되지 않는 상황이라 질문드립니다. 현재 코드에서 아무것도 출력이 되지 않는 이유가 무엇인지 궁금합니다! #include <bits/stdc++.h> using namespace std; int n, a; stack<pair<int,int>> s; vector<int> v; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 0; i < n; i++) { cin >> a; while (s.size() && s.top().second < a) { auto p = s.top(); v[p.first] = a; s.pop(); } s.push({i, a}); } while (s.size()) { auto p = s.top(); v[p.first] = -1; s.pop(); } for (int e : v) { cout << e << " "; } return 0; }
이 문제를 보고 큐브 같다는 생각이 들었습니다. 행을 뒤집을 수도, 열을 뒤집을 수도 있으니 결론적으로 0행과 0열을 뒤집으면 0행0열의 원소는 그대로지만 나머지 0행과 0열의 원소는 뒤집은 결과를 갖게 되니까요. 111 111 111 이 100 011 011 처럼 된다는 말입니다. 근데 저는 이 문제를 보고 도저히 행 또는 열을 선택해서 완전탐색을 하면 정답을 구할 수 있다. 는 사실을 혼자서 생각하지 못했습니다. 이유는 아까 예시와 같이 행과 열을 순차적으로 조작하면 개별요소도 수정할 수 있지 않을까? 하는 생각이 들어서 였습니다. 과연 코테에서 이런 아이디어를 떠올릴 수 있을지.. 자신이 없습니다.. 혹시 이 아이디어를 어떻게 생각하셨는지 궁금합니다. 감사합니다.
안녕하세요 큰돌님 강의에서 11:19 쯤 설명 관련해서 교안에는 그다음 이터레이터를 반환한다고 하는데 제가 이해하기로 그저 나머지 요소가 시작되는 인덱스를 반환하는 것으로 이해했는데요 왜 이터레이터가 반복된다고 하는건가요? js로 언어를 시작해서 포인터 이런 개념이 부족한데 그런 개념이 들어간건가요? 강의 1주차인데 아직 어려운것은 없지만 C++ 확실히 다르긴하네요ㅋㅋ 좋은 강의 해주셔서 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. http://boj.kr/4dae74666d35462094e6f4f319f86ac0 해당 소스를 가지고 했는데 문제 조건 N % 2 !=0 && N % 5 != 0 에 해당하는 값을 입력할 때는 아무런 출력이 되지 않고 해당 조건을 벗어나는 값을 입력할 때만 값이 출력됩니다. 아마 제가 모르는 부분이 있거나 교안에 제가 잊은 부분이 있는거 같은데 혹시 알려주실 수 있으실까요?
c++로 수강중인 학생입니다.. 백준 숫자야구 문제 c++로 풀어주실 수는 없을까요..? 몇번 구현해보다가 멘탈이 터져버렸습니다.. 우선은 #include <iostream> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int numbers[1000]; int strikes[1000]; int balls[1000]; for (int i = 0; i < n; i++) { cin >> numbers[i] >> strikes[i] >> balls[i]; } int answer = 0; for (int a = 1; a < 10; a++) { for (int b = 1; b < 10; b++) { for (int c = 1; c < 10; c++) { int counter = 0; if (a == b || b == c || c == a) { continue; } for (int i = 0; i < n; i++) { int check = numbers[i]; int strike = strikes[i]; int ball = balls[i]; int strike_count = 0; int ball_count = 0; int check1 = check / 100; int check2 = (check / 10) % 10; int check3 = check % 10; // 스트라이크 계산 if (a == check1) { strike_count++; } if (b == check2) { strike_count++; } if (c == check3) { strike_count++; } // 볼 계산 if (a == check2 || a == check3) { ball_count++; } if (b == check1 || b == check3) { ball_count++; } if (c == check1 || c == check2) { ball_count++; } // 매칭 여부 확인 if (strike != strike_count || ball != ball_count) { break; } counter++; } if (counter == n) { answer++; } } } } cout << answer << '\n'; return 0; } 이렇게 풀기는 했는데 선생님이 가르쳐주신 방향하고는 살짝 다른 거 같습니다.