ognboss1   7년 전


bool형식 array 100000이 존재하고 모두 false로 초기화 한다음 N개의 숫자부분만 true로 바꿉니다.

그리고 이제 M개의 숫자중 그 부분이 true면 1 false면 0을 출력하게끔 했는데 런타임 에러가 나는데 이유를 모르겠습니다.


bupjae   7년 전

입력 개수는 100000 이지만, 각각의 수는 int 형의 정수라고 되어 있습니다.

즉, 각각의 입력은 -2147483648 ~ +2147483647 의 범위 내에서 들어올 수 있으며,

작성하신 알고리즘으로는 배열 N이 할당받은 크기를 넘어서면서 런타임 에러가 발생합니다.

donghoon0709   7년 전

문제에 보시면 모든 수의 입력 법위가 int로 되어 있습니다.

그러므로 입력받은 수를 배열에 넣게 되면 런타임 에러가 나게 됩니다.

수를 집어넣는 다른 방법과, 배열에서 수를 찾아내는 다른 방법이 필요합니다.

이분 탐색을 하면 쉽게 찾을 수 있습니다.

이분 탐색을 하려면 먼저 정렬된 배열이 있어야 합니다.

예를 들어 수가 4 1 5 2 3로 들어오면 1 2 3 4 5로 정렬해야 합니다.

그리고 1을 찾는다고 합시다. 이분탐색은 가장 중앙에 있는 원소부터 비교를 합니다.

중간에 있는 원소는 3입니다. 1은 3보다 작으므로 이제 3,4,5는 검색할 필요가 없습니다.

왜냐하면 4와 5는 찾으려는 수보다 크다는 것이 확인이 되었기 때문입니다.

그다음 2를 비교합니다. 또 1이 2보다 작으므로 2는 검색할 필요가 없습니다.

그러면 남은 1이 우리가 찾는 수입니다.

정렬과 이분 탐색을 구현해 보시는 것도 좋지만 만약에 어려우시다면

#include<algorithm>을 하셔서

std::sort() (정렬을 하는 함수입니다.)

std::binart_search() (이분 탐색을 하는 함수입니다.)

를 사용해보시는 것이 어떨까요.

ognboss1   7년 전

아 그렇군요 아 제가 착각을 했군요 1~100000이 그냥 갯구였군여 아하 감사합니다.

댓글을 작성하려면 로그인해야 합니다.