게시글
질문&답변
완탐 3-E 시간초과 관련 질문입니다.
안녕하세요 병욱님 ㅎㅎ이 코드는 방문된 정점을 재방문하는 코드입니다. if(visited[nv.a][nv.b][nv.c] == 1) continue; visited[nv.a][nv.b][nv.c] = visited[v.a][v.b][v.c] + 1; q.push(nv);그렇기 떄문에 한정점당 6번 더 방문을 할 수 있는 코드이기 때문에 비효율적입니다. 예를 들어 탐색해야 하는 정점이 20개라면6^20이 되버립니다. 6^20은 3,656,158,440,062,976 이나 되는 숫자입니다. 방문한 정점은 재방문하지 않게 다시 짜보시겠어요? 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 38
질문&답변
6-I 질문드립니다
안녕하세요 예찬님 ㅎㅎ항상 열심히 하시네요 ㅎㅎ 화이팅입니다. 저코드에는 다음과 같은 반례가 있습니다. 4 510101010답 : 15 / 예찬님 : 0 확인해보시겠어요? 감사합니다.
- 0
- 2
- 37
질문&답변
예시에 대한 질문 2
안녕하세요 ㅎㅎ제가 설명을 잘못드렸네요(사진)혼란을 드려 죄송합니다. 이렇게 하시면 좋은 단어가 됩니다. 감사합니다.
- 0
- 2
- 27
질문&답변
예시에 관한 질문
안녕하세요 대식님 ㅎㅎ이렇게 그으면 됩니다. (사진) 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 28
질문&답변
5-V 질문드립니다.
안녕하세요 예찬님 ㅎㅎ for 문 - innerloop 자체가 좀 모호해서 그런 것 같습니다. for (int r = l; temp == 0 || r != (l - 1 + n) % n; r = (r + 1) % n) { 이부분을 이런식으로 바꿔보시겠어요? for (int step = 0; step 다른 부분은 다 괜찮은 것 같습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 36
질문&답변
2-C 질문 있습니다.
안녕하세요 ㅎㅎ (사진)링크 다시 확인 부탁드립니다. 감사합니다.
- 0
- 3
- 34
질문&답변
재귀 풀이 시간초과 질문
안녕하세요 대식님 ㅎㅎ for(int i = idx + 1; i이렇게 재귀함수를 작성하면 시간복잡도가 어느정도일까요? n 곱하기 n - 1 ... 이렇게 되지 않을까요? n의 최대범위는 15,000 이기 때문에 시간복잡도가 너무 크게 됩니다. 이 때문에 시간초과가 나는 것 같습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 28
질문&답변
1-K 질문있습니다.
안녕하세요 현정님 ㅎㅎ코드 깔끔하네요 ㅎㅎ 다른 카운팅배열 문제도 항상 map으로 접근하는데 배열로 접근하는게 좋을까요?-> 배열로도 시도해보며 꼭 공부하셔야 하지만 map으로 접근하셔도 무방합니다. 감사합니다.
- 0
- 1
- 44
질문&답변
2-C 질문있습니다
안녕하세요 개발님 ㅎㅎ코드 깔끔한데요?잘 짜셨습니다. ㅎㅎ먼저 4ms의 수준의 속도차이는 사실 미묘한 거라 신경을 쓰지 않아도 됩니다만제 생각에는 unordered_set으로 효율적으로 하려고 했지만 사실 범위자체가 1 ~ 100까지 작은 범위라 이범위를 효율적으로 하려고 했지만 unordered_set이라는 자료구조를 생성하는 비용이 오히려 더 든 것 같습니다. 나머지 부분은 다 좋습니다.제가 실제로 개발님 코드 기반으로 함수호출도 없애보고 unordered_set은 최악의 시간복잡도가 O(N)이기 때문에 O(logN) 인 set으로도 바꿔보고 한 코드를 첨부합니다. (이렇게 해도 20ms입니다. ㅎㅎ)#include using namespace std; const int maxDistance = 100; const int dx[] = { 1, 0, -1, 0 }; const int dy[] = { 0, 1, 0, -1 }; int inputDistance; int field[maxDistance][maxDistance]; bool visited[maxDistance][maxDistance]; int maxHeight = 0; set uniqueHeights; void CalcSafeCount(int x, int y, int waterHeight) { visited[y][x] = true; for (int i = 0; i = inputDistance || ny >= inputDistance) continue; if (visited[ny][nx]) continue; if (field[ny][nx] > inputDistance; for (int y = 0; y > height; field[y][x] = height; uniqueHeights.insert(height); maxHeight = max(maxHeight, height); } } int maxSafeCount = 1; for (int waterHeight : uniqueHeights) { if (waterHeight == maxHeight) continue; fill(&visited[0][0], &visited[0][0] + maxDistance * maxDistance, false); int safeCount = 0; for (int y = 0; y 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 30
질문&답변
학습 순서 질문!
안녕하세요 ㅎㅎ 교안 학습은 끝까지 완료하되, 이런 개념이 있구나 하고 1주차강의를 들어가시구요. 그 이후에 이거 모르겠다? 했을 때 다시 교안보면서 외워주시면 됩니다. 감사합니다.
- 0
- 2
- 44