본문 바로가기
국비지원/JAVA

[JAVA] 7-3. 배열을 다루는 방법 (순차탐색을 활용한 문자열비교 / 이진탐색)

by cosmog 2022. 9. 28.
반응형

➰ 배열을 다루는 방법

import java.util.Scanner;

public class ArraySearch01 {
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		/* 배열을 다루는 방법. */

		// 탐색 -> 순차탐색(순서대로), 이진탐색(중간값부터 비교)
		int[] arr = {30, 10, 20, 50, 40, 60, 100, 110, 90, 80};
		
		//입력받은 값의 위치를 출력
		int find = scan.nextInt();
		
		int index = -1;
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == find) { //찾은경우
				index = i; //인덱스 값을 수정
				break; //탈출
			}
		}
		System.out.println("인덱스위치:" + index);
		
		scan.close();
	}

}

 

➰순차탐색과 문자열비교

  • java에서는 string 비교를 절대 ==으로 할 수 없다. false로 인식한다.
  • 비교할문자열1.equals("비교할문자열2") 로 할 수 있다.
/* 문자열을 비교하는 공식 */
if(name.equals("홍길동")) {
	System.out.println("같음");
}
import java.util.Scanner;

public class ArraySearch02 {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);

		//순차탐색과 문자열 비교
		/* 순차 탐색*/
		String[] arr = {"홍길동","이순신","카카오","네이버","박찬호"};

		String name = scan.next();
		
		int index = -1;
		for(int i = 0; i < arr.length; i++) {
			if(name.equals(arr[i])) {
				index = i;
				break;
			}
		}
		
		if(index == -1) {//값이 없음.
			System.out.println(name + "은 없습니다.");
		}else {
			System.out.println(name + "는(은) " + index + "번째에 위치합니다.");
		}
		
	
		
		scan.close();
	}

}

➰ 이진탐색

이진탐색 : 값을 가장빨리 찾는 방법.

  • 전제조건이 정렬이 되어있어야 된다(오름차순, 내림차순) 중복없이.
  • 전제조건이 없다면 사용할 수 없다.
package day07;

import java.util.Arrays;
import java.util.Scanner;

public class ArraySearch03 {

	public static void main(String[] args) {

		/* 이진탐색 - 절반으로 나눠가며 찾아가는 과정 */
		//조건 - 순서대로 나열된 데이터

		int[] arr = {30, 50, 80, 100, 110, 250, 300, 500};

		Scanner scan = new Scanner(System.in);
		System.out.print("입력>");
		int num = scan.nextInt();
		
		//요 한줄짜리 코드가 밑에 구성한 이진탐색코드를 대체해준다.
		//System.out.println(Arrays.binarySearch(arr, num));

		int low = 0;
		int high = arr.length - 1; //7

		while(low <= high) {
			int mid = (low + high) / 2;

			if(num == arr[mid]) {
				System.out.println("인덱스 위치:" + mid);
				break;
			}

			if(num > arr[mid]) { //입력값이 중간값 보다 큰 경우
				low = mid+1;
			}else { //입력값이 중간값 보다 작은 경우
				high = mid-1;
			}
		}
		
		if(low > high) {
			System.out.println("찾는 값은 없습니다");
		}

		scan.close();
	}
}
반응형