처음으로

정보처리산업기사

2017년 05월 07일 기출문제

17. 다음 자료에서 65를 찾기 위하여 2진 검색할 경우 비교해야 할 횟수는?(오류 신고가 접수된 문제입니다. 반드시 정답과 해설을 확인하시기 바랍니다.)

6.gif

*해설

<문제 해설>
중간값(M)을 찾은후 찾으려는 값과 비교.
M={F(첫째값)+L(마지막값)} / 2
(3+97) / 2 = 50 찾으려는값보다 작으므로 찾는값은 54~97사이에 있음 - 1회비교
(54+97) / 2 = 75 찾으려는값보다 크므로 찾는값은 65~65 사이에 있음 - 2회비교
(65+65) / 2 = 65 - 3회비교

아래와 같은 오류 신고가 있었습니다.
여러분들의 많은 의견 부탁 드립니다.
추후 여러분들의 의견을 반영하여 정답을 수정하도록 하겠습니다.
참고로 정답 변경은 오류 신고 5회 이상일 경우 수정합니다.

[오류 신고 내용]

(3+97)/2 = 50 -> 찾는값이 50이상이니 54~97사이 50이하는 다버림
(54+97)/2 = 75 -> 찾는 값이 75이하이니 54~65 75이상은 다버림
여기서 이해가 안됨
50이하 다버리고 75이상은 다버리면 54하고 65가 남는데 왜 54를 제외한건지 모르겠네요.
(54+65)/2 가되야되는게 아닌지 119/2 =59.5 59.5이상은 한개밖에없으니 65가되서 총3개번비교한건지
제가 계산이 이상한건지

[추가 오류 신고]

저도 오류신고하신분의 내용이랑 같은생각입니다.
책에 나와있는대로 해도 비교한횟수는 4번 비교한걸로 나옵니다. 문제가 잘못됐거나 푸는방식이 잘못됐거나인데 푸는방식이 잘못된거라면 책도 잘못된겁니다.

[관리자 입니다. 2진검색에 대한 이해가 모두들 조금 부족하신듯 합니다.

해설을 작성해주신 송형근님도 그렇고..
오류신고 해주신 두분도 마찬가지입니다.

2진검색, 즉 2분검색은 자료의 숫자를 이용해서 나누기 2 해서 비교하는 방식이 아닙니다.
그러니까 (3 + 97)/2 하는건 잘못되었다는 것입니다.

그렇게 표현한 책이 있다면 그건 쉽게 표현하기 위한 것일수는 있으나 엄연히 틀린 방식입니다.

2진검색이든 어떠한 검색법이든 사람을 위한 검색이 아닌 "컴퓨터"를 이용한 검색에 사용하기 위한 것이고

자료가 1개가 아닌이상 배열이라는 구조를 사용하며
이때 배열 "방 번호"를 이용하여 나누기 2 하는것이 정상입니다.

위 자료를 기존으로 보면
3 이라는 숫자는 0번 방에 있고
97 이라는 숫자는 7번 방에 있습니다.
따라서 중간값을 구한다는건 중간 방번호를 구한다는 뜻입니다.

(0 + 7)/2 = 3(나머지 버림)

즉 3번방이 중간값을 가진 방번호라는 뜻이며 54라는 숫자가 비교 데이터가 됩니다.

어렵게 떠들기 보다는

http://ledgku.tistory.com/35

위 블로그의 내용과 그림 참조하시기 바라며
프로그래밍이 조금 되시는 분이시면 코드도 참고하시기 바랍니다.]

[오류신고 반론]
문제) 3,18,47,54,65,83,94,97 에서 65를 찾아보도록 하자(0~7또는 1~8 어느것을 사용해도 무관)

1. (처음값의 번호+마지막값의 번호)/2 = (1+8)/2=4.5(소수점 이하 절삭: 4)
Q: 4번째 숫자인 54가 65보다 크냐 작냐? A: 작다(결과: 54이하를 절삭)
남은것: 65,83,94,97
2. (5+8)/2=6.5(소수점 이하 절삭: 6)
Q: 6번째 숫자인 83이 65보다 크냐 작냐? A: 크다(결과: 83이상를 절삭)
남은것: 65
3. (5+5)/2=5
Q: 65가 65보다 크냐 작냐? A: 같다(즉, 값을 찾는데 까지 총 3회 비교하였다.)

* 반드시 찾는값(65)가 동일한값(65)과 '직접' 비교할 때까지 찾는다.
공유
해설보기
정답보기
<<이전
다음>>
목록
서버에 요청 중입니다. 잠시만 기다려 주십시오...