문)
5개의 int 배열에서 첫번째 중복 수가 발생한 경우의 첫번째 값과 인덱스를 반환한다.(가정. 중복수의 발생은 무조건 있다)
C/C++을 활용하여 작성.
사용 예)
int a[5] = {1,2,3,4,3};
int b, result;
result = rtnValIndex(a, &b);
printf("index = %d, result = %d ", b, result);
출력 예)
index = 2, result = 3
O(n²) 구현)
int rtnValIndex(int* a, int* b){
int i, j, check = 0;
for(i=0; i<5; i++){
if(check != 0)
break;
for(j=i+1; j<5; j++){
if(a[i] == a[j]){
*b = i;
check = 1;
break;
}
}
}
return a[*b];
}
--------------------------------------------------------------------------------
인데.. O(n)으로 변형하고싶은데 가능할까?? 혼자 생각중인데 아무리생각해도 힘드네..
좀 도와주라 ㅠㅠ
map사용?
맵?! 허.. 맵으로만 가능해? 그냥 포문한개로만 어케안될까?
O(n log n)이 최선
보통 2중for을 얇게 펴면 된다더라
진짜? 근데 왜 O(n), O(n²)으로 각각 구현하라고 되있었지 ㅠㅠ 엿맥이려는거였나
형들 너무고마워
밍고스형님 혹시 O(n log n)으로 구현 한번 해주면 안될까?
저거 O(n) 으로 가능함 Selection algo. 검색해봐 비슷한 방식임
Quick sort같은 건 분할하몀서 각 층마다 정렬 하기 때문에 nlogn이지 저건 아닌쪽은 바로바로 버리면 됨 빅오 n나옴 구글.검색 ㄱㄷ
ㄴ 선택정렬도 O(n²) 아니야? ㅠㅠ
딱봐도 O(n lg n )이 최선이네 뻔한거 아니냐 다 돌려야 하고 검색하는건 O(lg n)이고
만약에 안에 값이 범위가 유한한 숫자라면 배열로 표시하면 되긴 하것지만.... 과제 정도라면 그정도 수준 아닐까?
ㄴ 형 배열값은 1~99로 제한되어있다면 가능해?
제한되어있으면 O(n) selection sort
오근데 선택정렬자체가 n제곱인데 제한되어있으면 가능하단말야?