์ถ์ฒ: FreeCodeCamp ์ด ๊ธฐ์ฌ์์๋ Java์์ Arrays.binarySearch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
Java์ Arrays.binarySearch()๋ ๋ฌด์์ ๋๊น?
Arrays.binarySearch() ๋ฉ์๋ ์ ๋ํ ๊ณต์ ๋ฌธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ ์์ต๋๋ค.- ์ด ๋ฉ์๋๋ ์ด์ง ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ๋ฐ์ดํธ ๋ฐฐ์ด์์ ์ง์ ๋ ๊ฐ์ ๊ฒ์ํฉ๋๋ค.
- ํธ์ถ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ๋ฐฐ์ด์ ์ ๋ ฌํด์ผ ํฉ๋๋ค( sort(byte[]) ๋ฉ์๋ ์ฌ์ฉ). ์ ๋ ฌ๋์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๊ฒฐ์ ๋์ง ์์ต๋๋ค.
- ๋ฐฐ์ด์ ์ง์ ๋ ๊ฐ์ ๊ฐ์ง ์ฌ๋ฌ ์์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ด๋ค ์์๊ฐ ๋ฐ๊ฒฌ๋ ์ง ๋ณด์ฅํ ์ ์์ต๋๋ค.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int foundItemIndex = Arrays.binarySearch(vowels, key);
System.out.println("The given vowel is at index: " + foundItemIndex);
}
}
Arrays.binarySearch() ๋ฉ์๋๋ ๊ฒ์ํ๋ ค๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก, ๊ฒ์ํ๋ ค๋ ํค๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฃผ์ด์ง ๋ชจ์์ ์์ธ: 2์ ์์ต๋๋ค.
์ด ๋ฉ์๋๋ ์์ ์์ฒด๊ฐ ์๋๋ผ ๋ฐ๊ฒฌ๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ด ์์ ์์ ์ฌ์ฉ๋ ๊ฒ๊ณผ ๊ฐ์ ์ ์๋ก ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฉ์๋๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ ์์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ๋ฐฐ์ด ๊ธธ์ด๋ฅผ ๊ฒ์ ๋์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์์ ์ธ๋ฑ์ค๋ 0์ด๊ณ ๋ ์ธ๋ฑ์ค๋ 6์
๋๋ค. ๊ธฐ๋ณธ ์์ ์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ง์ ์ ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋ฑ์ค 2๋ถํฐ ์ธ๋ฑ์ค 4๊น์ง ๊ฒ์ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int startIndex = 2;
int endIndex = 4;
int foundItemIndex = Arrays.binarySearch(vowels, startIndex, endIndex, key);
System.out.println("The given vowel is at index: " + foundItemIndex);
}
}
์ด ๊ฒฝ์ฐ Arrays.binarySearch() ๋ฉ์๋ ๋ ๊ฒ์ํ๋ ค๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก, ์์ ์ธ๋ฑ์ค๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก, ์ข
๋ฃ ์ธ๋ฑ์ค๋ฅผ ์ธ ๋ฒ์งธ, ํค๋ฅผ ๋ค ๋ฒ์งธ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์ด ๊ธธ์ด ๋ด์์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์งํ๋ ํ ๋ฉ์๋๋ ์ ๋๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ ์ด๊ณผํ๋ฉด Array index out of range ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค . ๊ฝค ๊ฐ๋จํ์ฃ ? ์ด ๋ฉ์๋๋ ์์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํด๋น ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค. ํ์ง๋ง ์ฃผ์ด์ง ์์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
Arrays.binarySearch()๊ฐ ํน์ ์์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
Arrays.binarySearch() ๋ฉ์๋ ์ ๋ํ ๊ณต์ ๋ฌธ์๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค .- ์ด ๋ฉ์๋๋ ์ง์ ๋ ๋ฒ์ ๋ด์ ๋ฐฐ์ด์ ํค๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๊ฒ์ ๊ฒฐ๊ณผ์์ ํค์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด (-(insertion point) - 1) ์ ์ป์ต๋๋ค .
- ์ฝ์ ์ง์ ์ ํค๊ฐ ๋ฐฐ์ด์ ์ฝ์ ๋๋ ์ง์ ์ผ๋ก ์ ์๋ฉ๋๋ค. ๋ฒ์์ ์๋ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ ํค๋ณด๋ค ํฌ๊ฑฐ๋ ๋ฒ์์ ์๋ ๋ชจ๋ ์์๊ฐ ํค๋ณด๋ค ์์ ๊ฒฝ์ฐ toIndex(๋ ์ธ๋ฑ์ค)์ ๋๋ค. ์ง์ ๋ ํค.
- ํค๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋ฐํ ๊ฐ์ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ต๋๋ค.
(-(๊ฒ์ ํค๋ณด๋ค ํฐ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค) - 1) = (0 - 1) = -1
๋ค์๊ณผ ๊ฐ์ ์ฝ๋ ์กฐ๊ฐ์ผ๋ก ์ด๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
package arrays;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
System.out.println(Arrays.binarySearch(numbers, 0)); // -1
}
}
๋ฐฐ์ด [5, 6, 7, 8, 9, 10] ๊ณผ ๊ฒ์ ํค 12 ๊ฐ ์๋๋ฐ ๋ฐฐ์ด์ ๋ถ๋ช
ํ ์กด์ฌํ์ง ์๋๋ค๊ณ ๋ค์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฒ์ ํค๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ณด๋ค ํฝ๋๋ค. ์ฌ๊ธฐ์ ์ฝ์
์ง์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(-(์ข
๋ฃ ์ง์ (-(6) - 1) = (-6 - 1) = -7
์ข
๋ฃ ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ข
๋ฃ ์ธ๋ฑ์ค(์ด ๊ฒฝ์ฐ 6 ) ๋ก ์ฌ์ฉํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์ . ๋ค์๊ณผ ๊ฐ์ ์ฝ๋ ์กฐ๊ฐ์ผ๋ก ์ด๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
System.out.println(Arrays.binarySearch(numbers, 12)); // -7
}
}
๊ทธ๋ฌ๋ ์์ ๋ฐ ๋ ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ์ ์ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
int startIndex = 1;
int endIndex = 3;
System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 5)); // -2
System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 10)); // -4
}
}
์ง์ ๊ฐ์ ๊ณ์ฐํด ๋ณด์ธ์. ๋ค์๊ณผ ๊ฐ์ ๊ธฐํธ์ ํจ๊ป Arrays.binarySearch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค .
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int startIndex = 2;
int endIndex = 4;
System.out.println(Arrays.binarySearch(vowels, startIndex, endIndex, key));
}
}
์ง์ ๋ ๊ฒ์ ํค๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ๋์ผํ ์์น์ด ์ ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฐ์ด์ ๋ฌธ์์ ์ฃผ์ด์ง ๊ฒ์ ํค๋ฅผ ๋น๊ตํ ๋๋ ํด๋น ๋ฌธ์์ ASCII ์ฝ๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, A(65)๋ a(97) ๋ณด๋ค ์์ต๋๋ค . ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ ๊ต์ฐจ ํ์ธํ ๋ ์ด ์ ์ ๊ณ ๋ คํ์ญ์์ค.
GO TO FULL VERSION