3-E 뮤탈리스크 시간복잡도 질문
515
작성한 질문수 3
<질문>
###
https://www.acmicpc.net/problem/12869
뮤탈리스크문제의 시작복잡도는 BFS로 탐색하기니까
O(V+E) = O(60^3 + 6*60^3)=O(150만)
이렇게 계산하는게 맞을까요?
#####
문제를 풀기 전에
6가지의 선택지를 최대 14번쯤하고 6^14 는 10억보다 크니까 무식하게 풀기는 안되겠다고 생각을 했습니다 ((9+2+1)*14=182 > 60*3)
그런데 강의를 보고 각각 최대 6개의 가지가 있는 60^3의 상태를 탐색하는 문제라고 생각하니까 잘못 생각했다는 걸 알았습니다. 위에처럼 시간복잡도를 계산하는게 맞을까요?
이상입니다. 읽어주셔서 감사합니다.
답변 1
1
안녕하세요 923님 ㅎㅎ
뮤탈리스크문제의 시작복잡도는 BFS로 탐색하기니까
O(V+E) = O(60^3 + 6*60^3)=O(150만)
이렇게 계산하는게 맞을까요?
>> 아닙니다. 체력 60이 최대범위라고 해서 60을 기반으로 해서는 안됩니다. 경우의 수를 보시면
int _a[6][3] = {
{9, 3, 1},
{9, 1, 3},
{3, 1, 9},
{3, 9, 1},
{1, 3, 9},
{1, 9, 3}
};이렇게 총 6가지인데 이걸 기반으로 산정하셔야 합니다.
최대치로 계산하면
60, 60, 60 이고
9, 3, 1로 하든 뭐든 1로만 공격을 해도 어차피 나머지 3 9는 다른 SCV를 공격하기 때문에 9로 계산해도 무방하게 됩니다. (최소로 공격할 수가 없습니다.)
자 그럼 처음에 7번,
한 SCV 가 죽고.
0, 39, 53이 남죠?
그 다음 9로 다시. 6번.
0, 21, 0이 남죠?
그 다음 9로 다시. 3번.
즉, 최대 16번이 실행되는 문제라는 것을 볼 수 있습니다. 여기서 매번 경우의 수는 6가지이기 때문에
6 ^ 16이라고 보시면 됩니다.
즉,
2,821,109,907,456라는 어머어마한 숫자가 나옵니다. 2조네요.
그렇기 때문에 모든 경우의 수를 따지는 것이 아닌 BFS를 통해서 나름의 가지치기를 통해 문제를 풀어야 합니다.
#####
문제를 풀기 전에
6가지의 선택지를 최대 14번쯤하고 6^14 는 10억보다 크니까 무식하게 풀기는 안되겠다고 생각을 했습니다 ((9+2+1)*14=182 > 60*3)
그런데 강의를 보고 각각 최대 6개의 가지가 있는 60^3의 상태를 탐색하는 문제라고 생각하니까 잘못 생각했다는 걸 알았습니다. 위에처럼 시간복잡도를 계산하는게 맞을까요?
>> 먼저 무식하게 풀까 하고 드가시는 것은 잘하셨습니다. 시간복잡도 계산은 앞에 설명을 드렸구요. 다만, 이 문제 같은 경우 가중치가 같은그래프내에서 횟수의 최소값을 구하는 문제죠? 이 경우는 바로 bfs로 접근해볼까? 하면서 들어가시는 것 또한 좋은 방법입니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
1-E질문입니다!
0
518
2
3-L 틀린 부분 피드백 부탁드립니다.
0
820
2
1-A문제 순열재귀함수 질문입니다.
0
382
1
1-A 일곱난쟁이문제입니다
0
456
1
문제 풀 때 방향성에 대해
0
800
1
맥에서 vs code로 실행 관련 질문입니다
0
523
1
17071번 메모리 초과
0
386
1
1-C질문입니다!
0
421
2
2-B BFS 시간초과질문
0
630
2
1-O 13번 라인
0
441
1
6-J 놀이공원 문제 질문
0
381
1
구현관련 질문
0
483
1
강의 교안
0
319
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
536
1
1-K
0
473
2
3-G번 질문있습니다.
1
473
3
3-C 실행 시간 질문드립니다.
0
493
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
435
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
334
1
3-O go 함수 질문 드립니다.
1
447
2
4-A 출력 질문
0
304
1
1주차 1-O 질문드립니다
0
259
1





