인프런 커뮤니티 질문&답변

이종현님의 프로필 이미지
이종현

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

6-L

6-L 시간복잡도 질문

작성

·

300

0

http://boj.kr/75cc76adfce24cbd88595ea4ea999a5d

안녕하세요 강사님 ㅎㅎ

해당 강의 초반에 무식하게 풀었을 때의 시간복잡도가 (n * n-1 / 2)*n 이라고 설명하시는데 제가 혼자 문제풀 때는 다르게 계산을 했거든요...

저는 연속된 수들의 곱이니까 이중 for문으로

    for(int i=0; i<n; i++){
        for(int j=i+1; j<n; j++){

식의 연산이 필요하다 생각했고 여기다가 백트래킹으로 == 0일때 break 정도하는 조건까지만 넣었습니다. 이러면 등차수열의 합 정도의 시간복잡도가 되니 O(n^2)이고 n의 최대범위가 10000 -> 제곱은 1억 -> 1억에서 천만까지는 해볼만하다고 알려주셔서 위 생각의 흐름대로 문제를 풀었습니다. 혹시 제가 시간복잡도 계산을 잘못한건가요..?

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 종현님 ㅎㅎ

천재적인 발상이네요..

식의 연산이 필요하다 생각했고 여기다가 백트래킹으로 == 0일때 break 정도하는 조건까지만 넣었습니다. 이러면 등차수열의 합 정도의 시간복잡도가 되니 O(n^2)이고 n의 최대범위가 10000 -> 제곱은 1억 -> 1억에서 천만까지는 해볼만하다고 알려주셔서 위 생각의 흐름대로 문제를 풀었습니다. 혹시 제가 시간복잡도 계산을 잘못한건가요..?

>> 아뇨 시간복잡도 1억 계산 잘하셨습니다. 1억이면 해볼만하긴 하나 크긴 크지만 저렇게 ar[j] == 0일 때 break;건 것도 너무 멋지네요. 잘하셨습니다.

 

감사합니다.

이종현님의 프로필 이미지
이종현
질문자

DP에서 이해가 바로바로 되지 않아서 요즘 고전 중인데 이렇게 칭찬들으니 힘이 나네요 ㅜㅜ 감사합니다 !!

이종현님의 프로필 이미지
이종현

작성한 질문수

질문하기