[이진 탐색 실전 문제] 원하는 정수 찾기 편 질문
503
작성자 없음
0 câu hỏi đã được viết
안녕하세요? 강의를 듣다가 궁금한 것이 생겨 질문 드립니다.
자바의 정렬 기본 알고리즘 시간 복잡도와 이진 탐색 시간 복잡도가 nlogn인 건 이해했는데, 코드부를 보면 이중 반복문이 나오고 있습니다.
앞 서 강의에서 반복문을 기준으로 이중 반복문이면 n의2승이라고 말씀하셨는데, 이 중 반복문을 썼는데도 nlogn이 되는 건 반복문이 진행되는 동안 절반씩 찾기 때문인가요??
만약 이중 반복문으로 시간 복잡도가 올라간다면 이중 반복문을 쓰지 않고, 해결하는 방법을 알려주실 수 있으실까요?
Câu trả lời 1
0
개발주아님 안녕하세요. 반갑습니다.
이진탐색의 경우 제가 이해하기로는 만약 데이터가 정렬이 되어있는 상태라면 logn의 시간복잡도를 가지게 되고
미정렬 상태라면 정렬을 먼저 수행해야하기 때문에 일반적인 정렬 시간 복잡도인 nlogn이 더해지게 됩니다.
따라서 정렬하는데 걸리는 시간 (nlogn) + 이진 탐색 (logn) = nlogn (상수는 무시, 제일 오래 걸리는것 기준) 정도로 생각하면 되지 않을까 싶습니다.
질문 주신 내용으로 들어가보면 말씀하신 이중 반복문은 아마도
for(int i = 0; i< M; i++)
while(start <= end )
를 뜻하는 것으로 이해하였습니다.
실제 여기에서 이진 탐색을 수행하는 부분은 while 문으로 logn의 시간복잡도를 가지게 됩니다.
(개발쥬아님이 말씀해주신데로 절반씩 찾기 떄문입니다.)
for문의 경우 이진 탐색에 관련 된 부분이 아닌 문제의 요구사항으로 인하여 이진탐색을 수행하는 횟수로
생각하여 주시면 좋을 것 같습니다 (요구사항에 따라 해당 이중 반복문은 필수적으로 필요하다고 생각됩니다.)
즉 logn의 시간복잡도를 가지는 이진 탐색을 M번 수행하는 로직이다로 생각해주시면 되고 주어진 M의 범위가 N과 동일하기 때문에 결국 이 이중 포문의 시간 복잡도는 mlogn => nlogn 이 됩니다.
전체 코드의 시간 복잡도를 따지면 해당 로직에서 nlogn,
위쪽에서의 Array.sort(A) 부분에서 nlogn 이 측정되고 nlogn + nlogn => nlogn의 시간복잡도를 가지게 됩니다.
n의 범위가 100,000이며 시간 제한이 2초, nlogn에 대입을 하게되면 2억(1억에 1초)보다 작은 수가 나오기 때문에 시간안에 결과 도출이 가능하게 됩니다.
답변이 되셨으면 좋겠습니다.
즐거운 주말 보내세요.
1
이 분의 질문에서 추가로 질문드립니다. 강의를 보면 이진 탐색의 시간 복잡도 최악이 nlogn 이라고 나오는데, 저는 logn으로 알고 있습니다. 이 부분에서 혹시 오류가 있는건지 질문드립니다.
0
안녕하세요. 이진탐색은 logn 이 맞습니다^^ 다만 해당문제는 n(m)개의 수 만큼 이진탐색을 반복하여 수행하여야 하기때문에 nlogn 으로 말씀드린것같습니다. 즐거운하루되세요~
백준 1940 주몽의 명령 시간복잡도
0
59
0
다음영상이 문제 풀이 영상이라고 하셨는데 문제풀이 영상이 누락되어있는 것 같습니다
0
127
1
코딩테스트 디버깅
0
344
1
탐색 순서 질문
0
148
1
[P11726 2*N 타일채우기] top down 방식을 사용하니 런타임 에러가 발생합니다.
0
105
1
2018 연속된 자연수의 합 구하기 백준 사이트에서 메모리 초과 오류가 발생합니다.
0
201
1
1강 시간복잡도 중간에 중첩for문 직전에 상수는 상관없어요 하신 부분이 이해가 안됩니다
0
159
1
왜 int, long은 안되는지 궁금합니다.
0
224
1
DNA 비밀번호 (백준 12891) 통과가 안됩니다.
0
525
2
LCA 빠르게 구하기 Java 코드 시간초과
0
244
1
스택문제 백준 1874
1
458
1
백준11659 구간합 런타임 에러
0
306
1
백준 2178 미로탐색 질문 입니다.
0
448
1
구간합구하기1 (백준11659)
0
421
1
혹시 다른 ide에서 잘 돌아가는 프로그램이
0
349
1
내림차순으로 정렬하기 강의에서..
0
267
1
백준 11720 숫자의 합 질문 있습니다
0
433
1
(숫자의 합)1<=N <=100 사이의 값
0
383
1
소수구하기-백준 1929 질문
0
350
1
12891_DNA비밀번호
0
633
3
숫자의 합 구하기
0
389
1
안녕하세요 질문있습니다.
0
336
0
union 코드에 질문 있습니다.
0
399
2
[그리디 실전 문제] 최솟값을 만드는 괄호 배치 찾기 (백준 1541) - 반례를 못찾겠습니다 ㅠㅠ
1
308
1

