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

jeeeee_sung님의 프로필 이미지
jeeeee_sung

작성한 질문수

코딩테스트 [ ALL IN ONE ]

[심화] 시간복잡도 Time Complexity

프로그래머스나 백준 확인해보니까

해결된 질문

작성

·

1.1K

1

프로그래머스에선 보통 숫자의 범위, 배열의 최대크기

백준에선 시간제한 이런식으로 주어지는데 여기서 말씀해주신건 시간제한이죠ㅕ??

답변 2

0

jeeeee_sung님의 프로필 이미지
jeeeee_sung
질문자

https://www.acmicpc.net/problem/22864

와... 도움 많이 됐습니다..!! 혹시 이거 하나만 더 여쭤봐도 되나요?? 2개 정도면 충분히 감 잡을 거 같습니다!!!!

개발남노씨님의 프로필 이미지
개발남노씨
지식공유자

시간복잡도에 사용할 n은 다양한 형태로 문제에서 드러나요. 저희가 어떻게 문제를 해결해나갈지에 따라 달라지죠.

 

그래서 제가 문제풀이 영상에서 항상 "이 값이 input size N인지는 접근방법을 생각해보면서 확정지을 수 있다." 라고 말씀드립니다.

 

이 문제에서 A, B, C, M 의 값은 시간복잡도를 결정하지 않아요. 저희는 이 문제를 완전탐색으로 만약 접근한다고 해볼게요.

그럼 모든 경우의수를 따져봐야겠죠? 매 시간마다 우리는 선택권이 2 가지가 있어요. 일을 할건지 안 할건지. 근데 그게 10시간이면 2^10 가지의 경우의 수를 다 따져봐야겠죠. 근데 24시간이면 2^24의 시행횟수가 될거에요. 즉 제한된 시간이 n 시간일 때 2^n 의 시간복잡도가 걸린다고 보면 되죠. 이 문제에서 n은 몇시간 동안 일할지 에요. 여기서 근데 제한조건으로 24시간 일할거다! 하루만 일할거다! 라고 말했죠.

 

즉 우리는 O(2^n)의 접근방법을 생각해냈고, 요기서 n은 내가 일할 시간이고, 문제에서 n을 24라고 정해줬기 떄문에 2^24 = 16,777,216 < 10^8 이니까 완전탐색을 해도 시간초과가 나지 않을거에요. 16,777,216 이값은 10^7에 가깝기 때문에 코드를 좀 비효율적으로 작성하면 시간초과가 날 수 있는 위태로운 접근방법이긴 하네요.

질문에 대한 답이 됐을까요~?

 

jeeeee_sung님의 프로필 이미지
jeeeee_sung
질문자

와... 이해 끝났습니다...!! 감사합니다

0

개발남노씨님의 프로필 이미지
개발남노씨
지식공유자

 

백준에서는 모든 문제에 시간 제한이 쓰여져 있는데, 이건 크게 의미 없습니다. 왜냐면 다른 프로그래머스나 leetcode문제는 시간제한이 몇초인지 정해주진 않았으나, 보통 1~10초를 넘어가지 않아야된다고 암시적으로 정해져 있어요. 약간 국룰?

국룰을 백준에서는 명시한것 뿐입니다. 즉, 크게 의미 없는거죠.

https://www.acmicpc.net/problem/11727

이 문제를 보시면, 국룰을 명시해줬고 (시간제한 1초) 입력값의 범위를 정해줬네요. (1 <= n <= 1000 )

그럼 이 문제는 O(n^2)으로 풀어도 되고, O(n^3)으로는 풀 수 없게 됩니다. 더욱이 O(2^n)이나 O(3^n)의 풀이방법으로는 턱도 없죠.

 

이렇게 입력값의 범위를 통해 시간복잡도를 미리 계산할 수 있게됩니다.

imageimage질문에 대한 답이 됐을까요~??

더 궁금한점있으시면 언제든 질문 올려주세요

jeeeee_sung님의 프로필 이미지
jeeeee_sung

작성한 질문수

질문하기