Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다.


배열 비교

두 배열의 모든 요소의 값이 같은지를 판단하는 알고리즘

static boolean equals(int[] a, int[] b)
	{
		if(a.length != b.length) return false; //배열의 길이가 다르면 false 리턴
		
		for(int i = 0; i < a.length; ++i) if(a[i] != b[i]) return false; //요소의 값이 다르면 false 리턴
		
		return true; //배열의 길이가 같고, 모든 요소의 값이 같으면 true 리턴
	}

 

아래는 실행예제

public class Main{
	static boolean equals(int[] a, int[] b)
	{
		if(a.length != b.length) return false; //배열의 길이가 다르면 false 리턴
		
		for(int i = 0; i < a.length; ++i) if(a[i] != b[i]) return false; //요소의 값이 다르면 false 리턴
		
		return true; //배열의 길이가 같고, 모든 요소의 값이 같으면 true 리턴
	}
	
	public static void main(String[] args) {
		int[] array = {1,2,3,4,5,6,7};
		int[] array2 = {1,2,3,4,5,6};
		int[] array3 = {2,5,3,6,7,7,8};
		int[] array4 = {1,2,3,4,5,6,7};
		
		System.out.println(equals(array, array2));
		System.out.println(equals(array, array3));
		System.out.println(equals(array, array4));
		
	}
}
/*
false
false
true
*/

 

 

배열 복사

배열 a와 b를 매개값으로 받아서 배열b의 요소를 a배열로 복사하는 메소드를 작성

static void copy(int[] a, int[] b)
	{
		if(a.length < b.length) //b의 길이가 a보다 크면
		{
			System.out.println("배열의 길이가 모자릅니다.");
			return;
		}
		for(int i = 0; i < b.length; ++i) a[i] = b[i]; //배열 요소 복사
	}
아래의 코드는 a배열의 길이가 더 작아도 작은 길이 만큼만 복사하는 알고리즘
static void copy(int[] a, int[] b)
	{
		int num = a.length <= b.length ? a.length : b.length;
		for (int i = 0; i < num; i++) a[i] = b[i];
	}​

 

실행 예제

public class Main{
	static void copy(int[] a, int[] b)
	{
		if(a.length < b.length) //b의 길이가 a보다 크면
		{
			System.out.println("배열의 길이가 모자릅니다.");
			return;
		}
		for(int i = 0; i < b.length; ++i) a[i] = b[i]; //배열 요소 복사
	}
	static void printArray(int[] array) //배열 요소 출력
	{
		for(int i = 0; i < array.length; ++i)
		{
			if(i == array.length-1) {System.out.println(array[i]); break;}
			System.out.print(array[i] + ", ");
		}
	}
	
	public static void main(String[] args) {
		int[] array = {5,3,32,9,6,3,8};
		int[] array2 = {1,2,3,4,5,6,7};
		
		printArray(array);
		copy(array,array2); //array2를 array에 복사
		printArray(array);
	}
}
/*
5, 3, 32, 9, 6, 3, 8
1, 2, 3, 4, 5, 6, 7
*/

 

 

배열 역순으로 복사

배열 a와 b를 매개값으로 받아서 배열 b의 요소를 a배열로 역순으로 복사하는 메소드를 작성

static void rcopy(int[] a, int[] b)
	{
		if(a.length < b.length) //배열 b의 길이가 더 크면
		{
			System.out.println("배열의 길이가 모자릅니다.");
			return;
		}
		for(int i = 0; i < b.length; ++i) a[i] = b[b.length-i -1]; //배열 요소 복사
	}
아래의 코드는 a배열의 길이가 더 작아도 작은 길이 만큼만 복사하는 알고리즘
static void rcopy(int[] a, int[] b) {
		int num = a.length <= b.length ? a.length : b.length;
		for (int i = 0; i < num; i++)a[i] = b[b.length - i - 1];
	}​

 

실행예제

public class Main{
	static void rcopy(int[] a, int[] b)
	{
		if(a.length < b.length) //배열의 길이가 서로 다르면
		{
			System.out.println("배열의 길이가 모자릅니다.");
			return;
		}
		for(int i = 0; i < b.length; ++i) a[i] = b[b.length-i -1]; //배열 요소 복사
	}
	static void printArray(int[] array) //배열 요소 출력
	{
		for(int i = 0; i < array.length; ++i)
		{
			if(i == array.length-1) {System.out.println(array[i]); break;}
			System.out.print(array[i] + ", ");
		}
	}
	
	public static void main(String[] args) {
		int[] array = {1,2,3,4,5,6,7};
		int[] array2 = {10,11,12,13,14,15,16};
		
		printArray(array);
		rcopy(array,array2);
		printArray(array);
	}
}
/*
1, 2, 3, 4, 5, 6, 7
16, 15, 14, 13, 12, 11, 10
*/

 

위 알고리즘이 이해가 안간다면 아래의 글을 읽는 것을 추천합니다.

2023.01.21 - [Data Structure & Algorithm] - [JAVA] 배열 요소를 역순으로 정렬하는 알고리즘