VioletaBabel

몸풀기 1 본문

알고리즘문제들/CHC
몸풀기 1
Beabletoet 2017. 6. 9. 22:20

[배열] 숫자값을 인풋으로 받아서 정렬된 정수배열에서 얼마나 등장하는지 찾기 (제한 시간복잡도 O(log N))


예를들어 3과 [1,1,3,3,4,4,4] 이 나오면 3이 두번 나오므로 2.


입력

3

1 1 2 2 3 3 4 5 


출력

2

====================


#include<cstdio>

int main()

{

int fn, temp, cnt = 0;

for (scanf("%d", &fn); scanf("%d", &temp) != EOF;)

cnt = (fn == temp) ? (cnt + 1) : cnt;

printf("%d", cnt);

}

//입력을 받으면서 바로 카운트를 세어보았습니다.


=======================


#include<cstdio>

#include<vector>

using namespace std;

int main()

{

vector<int> v;

int fn, temp, cnt = 0, front = 0, middle, end;

scanf("%d", &fn);

while (scanf("%d", &temp) != EOF)

v.push_back(temp);

for (end = v.size(); front <= end;)

{

middle = (front + end) / 2;

if (fn == v.at(middle))

break;

else if (fn > v.at(middle))

front = middle + 1;

else

end = middle - 1;

}

if (middle < v.size() - 1)

for (temp = middle; fn == v.at(temp++);)

{

++cnt;

if (temp == v.size() - 1)

break;

}

if (middle > 0)

while (fn == v.at(--middle))

{

++cnt;

if (middle == 0)

break;

}

printf("%d", cnt);

}

//배열을 받고 이진 탐색으로 위치를 찾은 다음, 양쪽으로 이동하며 해당하는 갯수를 더해보았습니다.

=====================


Comments