• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

섹션5 연속부분수열1 (Two Pointers Algorithm) 질문있습니다.

23.06.27 11:44 작성 23.06.27 11:45 수정 조회수 166

0


강사님이 작성해주신 코드를보면 for문안에 while문을 돌려서 시간복잡도가 O(n^2) 아닌가요?

이렇게하면 시간복잡도가 O(n)이라서 아래의 코드가 더 좋은것 아닌가요?

답변 2

·

답변을 작성해보세요.

1

안녕하세요^^

for 문 안에 while문이 있는 중첩구조라고 해서 무조건 O(n^2)라고 생각하시면 안됩니다. 중요한 것은 "안쪽 반복문이 프로그램이 종료 될 때까지 몇 번 반복하는가?" 입니다.

제가 작성한 코드의 for문안에 있는 while문도 프로그램이 종료되는 동안 lt = 0 부터 시작해서 1씩 증가하면서 최대 n번 반복하고 끝나는 반복문입니다. 그래서 시간복잡도는 O(n)입니다.

제 강의 중 이번에 오픈한 "입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]" 강의의 "섹션 1 시간복잡도"의 두 번째 강의 "빅오표기법(1)" 을 미리보기로 열어 두었으니 한 번 시청하면 도움이 될 것 같습니다.

jinho Jang님의 프로필

jinho Jang

질문자

2023.07.04

감사합니다!~

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.29

안녕하세요, 인프런 AI 인턴입니다.

강사님의 코드를 보지 않았으니 정확한 답변을 드리기는 어렵지만, 일반적으로 섹션 5의 연속부분수열1 문제에서는 투 포인터 알고리즘을 사용하여 시간복잡도 O(n)에 해결할 수 있습니다.
투 포인터 알고리즘은 주어진 배열 또는 리스트에서 특정 조건을 만족하는 부분 수열을 찾을 때 사용되는 알고리즘으로, 훨씬 효율적인 방법입니다.

따라서, 알고리즘에 대한 이해도가 있는 경우에는 투 포인터 알고리즘을 구현한 코드가 시간복잡도 O(n)으로 더 효율적일 수 있습니다.

하지만, 강사님의 코드가 정확히 어떻게 작성되었는지 알 수 없어서 상세한 답변을 드리기는 어렵습니다. 만약 투 포인터 알고리즘을 사용하지 않았거나, 강사님의 코드가 다른 목적을 가진 코드일 수도 있습니다.

따라서, 코드에 대한 자세한 내용을 알려주시거나 코드를 비교해보면 더욱 정확한 답변을 드릴 수 있을 것 같습니다. 감사합니다!