<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Off-by-One on Kelly Dev</title><link>https://kelly-chui.github.io/tags/off-by-one/</link><description>Recent content in Off-by-One on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 31 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/off-by-one/index.xml" rel="self" type="application/rss+xml"/><item><title>Algorithm. Binary Search off-by-one 에러 없이 구현하기</title><link>https://kelly-chui.github.io/posts/cs-algorithm-binary-search/</link><pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-algorithm-binary-search/</guid><description>&lt;h2 id="off-by-one-error"&gt;off by one error&lt;/h2&gt;
&lt;p&gt;바이너리 서치를 할 때, 경계나 중간 값을 처리하면서 인덱스가 하나 어긋나는 에러&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;주요 원인은 바이너리 서치에 대한 이해 부족&lt;/li&gt;
&lt;li&gt;인덱스 레인지, high / low 갱신 방식, 중간값 계산 방식, 값 리턴 방식을 다양하게 생각해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="binary-search-테크닉"&gt;Binary Search 테크닉&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;else&lt;/code&gt;보다는 &lt;code&gt;else if&lt;/code&gt;를 사용하여 조건을 명확하게 표현하기&lt;/li&gt;
&lt;li&gt;오버플로우 방지를 위해서는 &lt;code&gt;mid&lt;/code&gt;를 계산할 때, &lt;code&gt;(low + high) / 2&lt;/code&gt;보다 &lt;code&gt;low + (high - low) / 2&lt;/code&gt;를 사용하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;바이너리 서치는 단순히 정렬된 배열에서 값을 찾는 알고리즘이 아니다. 바이너리 서치를 이용하여, 정확한 값을 찾는 경우보다 조건을 만족하는 첫 번째 또는 마지막 위치를 찾는 경우가 더 많다.&lt;/p&gt;</description></item></channel></rss>