JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #156. Java์—์„œ Arrays.binarySearch() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #156. Java์—์„œ Arrays.binarySearch() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ถœ์ฒ˜: FreeCodeCamp ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Java์—์„œ Arrays.binarySearch() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #156.  Java์—์„œ Arrays.binarySearch() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - 1

Java์˜ Arrays.binarySearch()๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Arrays.binarySearch() ๋ฉ”์„œ๋“œ ์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ๋ฉ”์„œ๋“œ๋Š” ์ด์ง„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์—์„œ ์ง€์ •๋œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( sort(byte[]) ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ). ์ •๋ ฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์— ์ง€์ •๋œ ๊ฐ’์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์–ด๋–ค ์š”์†Œ๊ฐ€ ๋ฐœ๊ฒฌ๋ ์ง€ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ 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 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) ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค . ๊ฒ€์ƒ‰ ํ‚ค์— ๋”ฐ๋ผ ์‚ฝ์ž… ์ง€์ ์˜ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [5, 6, 7, 8, 9, 10] ๋ฐฐ์—ด์ด ์žˆ๊ณ  ๊ฒ€์ƒ‰ ํ‚ค๊ฐ€ 0 ์ธ๋ฐ ๋ฐฐ์—ด์— ๋ถ„๋ช…ํžˆ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ํ‚ค๋Š” ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒ€์ƒ‰ ํ‚ค๋ณด๋‹ค ํฐ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” 5 ์ž…๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์‚ฝ์ž… ์ง€์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
(-(๊ฒ€์ƒ‰ ํ‚ค๋ณด๋‹ค ํฐ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ธ๋ฑ์Šค) - 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) ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค . ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ์„ ๊ต์ฐจ ํ™•์ธํ•  ๋•Œ ์ด ์ ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION