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

kingbj0429님의 프로필 이미지

작성한 질문수

코딩테스트 [ ALL IN ONE ]

[코테 적용] LIFO 2번째 문제 시간복잡도 질문

작성

·

408

·

수정됨

2

스크린샷 2023-02-16 오전 12.40.00.png

안녕하세요 좋은 강의 감사합니다 !!

 

바로 본론으로 들어가면, 여기서 조건이 10^5 이니깐 O(n^2) 로 풀면 안된다고 하셨는데..

for 문 안에 while 문이 있으니깐 결국 O(n^2) 아닌가요??

temperatures 도 한번 훑고, stack 도 한번 훑으니깐 총 O(n^2) 이라고 생각했는데 잘못 이해하고 있나봐요 ㅜㅜ

 

시간복잡도 질문 - 밤의멜로디 님이 주신 질문에 대한 답변 내용이라면 while 문도 O(n^2) 이 아닌가 라는 생각이 듭니다..

답변 2

2

이거는 제가 남긴 거랑 조금 다른거 같긴한데,

가장 마지막에 담긴 온도가 지금 온도 보다 작을때만 동작 하는거라서 이 경우에는 while문이 굉장히 적게 돌아요. 경우에 따라서는 while문이 아예 안 돌 수도 있구요.

최악의 경우(모든 온도가 첫번째보다 낮아지다가 맨 마지막에 온도가 높은경우)에 n번을 돌긴 할텐데

그렇게 되면 결국 O(2n)이라서 O(n)이 되긴 해요.

제가 질문했던 거는 반복문이 무조건 돌아야 했었던거라....

제 생각이 틀릴수도 있는데, 각자 생각을 공유하다 보면 서로한테 도움이 되지 않을까 해서 남겨 봅니다 ㅎㅎ

 

설명 감사해요! 그런데 말씀하신 최악의 경우에 O(2n)이 된다는게 이해가 안가는데 조금만 자세히 설명해 주실 수 있나요?

아 이거는 그냥 제 개인적인 의견이라 틀릴수도 있으니 참고 정도로만 부탁드립니다 ㅎㅎ

최악의 경우 O(2n)이 된다는 거는 while문이 돌 때 최대 많이 돌 수 있는 수가 얼마인지를 최악의 경우로 봤는데, 이 경우는 반드시 마지막까지 더 따뜻한 날이 온다는 전제 하에요.
반드시 더 따뜻한 날이 온다면 스택에 있는 모든 정보를 다 빼야 되기 때문에 반드시 n번을 돌아야 하거든요.

결국 while문이 돌 수 있는 가장 많은 수는 아무리 많아 봐야 n번이라는 거죠.

따로 나눠서 돌든 한번에 돌든 최악의 경우 n 번이 돌아가는 거고 운 좋아서 첫번째 날씨 보다 두번째 날씨만 좋고 나머지 날씨는 점점 떨어진다면 while문은 딱 한번만 돌겠죠.

그렇기 때문에 최악의 경우라도 반복문의 합은 n 번이기 때문에 O(2n) = O(n)이 되는거죠.

바꿔 말하자면 stack에 들어갈 수 있는 개수는 최대 n개이고 stack에서 빼 봤자 n개 밖에 뺄 수 없으니까 나눠서 돌든 한번에 돌든 n번의 반복문 밖에 돌아갈 수 없다는 뜻이죠.

 

글로 적다보니 잘 전달이 안 될 수도 있는데 이해하시는데 조금이라도 도움이 됐으면 합니다.

물론 제 생각일 뿐, 틀릴수도 있습니다!

@밤의멜로디 님 자세한 설명 정말 감사합니다 ^^!! 덕분에 이해가 많이 되었어요!!! 강의를 계속 듣다보니 이에 대한 내용이 나오네요! 혹시 다른 궁금한 분들을 위해 남겨 놓을게요. < 강의 Hash Table - [코테 적용] [2] Key in (전반부) 20:12부터 >

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

아하 자세한 설명 감사합니다 :)

반복문이 2번 온다고 해서 항상 O(n^2) 이라고 생각하면 안되겠군요..!!

0

저도 이게 궁금했습니다!! for문 안쪽에 while문을 도는데 시간복잡도가 O(n^2)이 되는 것 아닌지..