코딩 테스트

배열 및 문자열

orin602 2024. 12. 30. 12:42

1. 배열의 합 계산

(정수 배열이 주어졌을 때 배열의 모든 요소의 합을 구하기)

입력 : [1, 2, 3, 4, 5]

출력 : 15


테스트

package Test;

import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		int[] arr = {1, 2, 3, 4, 5};
		System.out.println(Arrays.toString(arr) + " 배열의 합 : " + arraySum(arr));
	}
	
	public static int arraySum(int[] arr) {
		int sum = 0;
		for(int num : arr) { // 배열을 하나씩 꺼내서 num에 저장
			sum += num;
		}
		return sum;
	}
}
  • Arrays.toString(arr) : 배열의 내용 [1, 2, 3, 4, 5] 형태의 문자열로 반환.
  • arraySum(arr) : arr 배열의 모든 원소를 더해서 반환.

결과


2. 두 배열 병합 후 정렬

(두 개의 정렬된 배열을 병합하고 정렬된 배열 반환하기)

입력 : [1, 3, 5], [2, 4, 6]

출력 : [1, 2, 3, 4, 5, 6]


테스트

package Test;

import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		int[] arr1 = {1, 3, 5};
		int[] arr2 = {2, 4, 6};
		System.out.println(Arrays.toString(arr1) + " + " + Arrays.toString(arr2));
		
		int[] merged = forMergeSort(arr1, arr2);
		System.out.println(Arrays.toString(merged));
	}
	
	public static int[] forMergeSort(int[] arr1, int[] arr2) {
		// 두 배열 크기 합만큼 새 배열 생성
		int[] merged = new int[arr1.length + arr2.length];
		
		// arr1 배열을 merge 배열에 넣기
		for(int i = 0; i < arr1.length; i++) {
			merged[i] = arr1[i];
		}
		// arr2 배열을 merge 배열에 넣기
		for(int i = 0; i < arr2.length; i++) {
			merged[arr1.length + i] = arr2[i];
		}
		
		// 배열 정렬
		Arrays.sort(merged);
		
		return merged;
	}
}

 

결과

 

다른 방법

public static int[] mergeSort(int[] arr1, int[] arr2) {
    int[] merge = new int[arr1.length + arr2.length];

    // 배열 복사
    System.arraycopy(arr1, 0, merge, 0, arr1.length);
    System.arraycopy(arr2, 0, merge, arr1.length, arr2.length);

    // 배열 정렬
    Arrays.sort(merge);

    return merge;
}
  • System.arraycopy() : 배열1(arr1)과 배열2(arr2)의 원소를 새 배열(merge)에 복사.
    • arraycopy(arr1, 0, merge, 0, arr1.length);
      arr1 : 복사할 배열, 0 : arr1에서 복사를 시작할 인덱스, merge : 복사된 내용을 저장할 배열, 
      0 : merge에서 값을 저장하기 시작할 인덱스, arr1.length : 복사할 원소 개수.(arr1의 길이만큼)
  • Arrays.sort(merge); : 병합된 배열을 정렬.

결과

 

개인적으로 for문이 더 쉬운데...


+ 2차원 배열 합 구하기

(3x3의 2차원)

테스트

package Test;

public class Main2 {

	public static void main(String[] args) {
		int[][] arr = {
				{1, 2, 3},
				{4, 5, 6},
				{7, 8, 9}
		};
		
		int sum = arraySum(arr);
		System.out.println("2차원 배열 합 : " + sum);
	}
	
	public static int arraySum(int[][] arr) {
		int sum = 0;
		
		for(int i = 0; i < arr.length; i++) { // 각 행 순환
			for(int j = 0; j < arr[i].length; j++) { // 각 열 순환
				sum += arr[i][j];
			}
		}
		
		return sum;
	}
}

 

결과

[ 1 + 2 + 3 + 4 + 5 +  6 + 7 + 8 + 9 = 45 ]


++ 2차원 배열 병합

* 행 단위로 병합 : 두 배열을 병합할 때 배열의 행을 차례로 이어붙이는 방식.

package Test;

import java.util.Arrays;

public class Main3 {

	public static void main(String[] args) {
		int[][] arr1 = {
				{1, 2}, {3, 4}
		};
		
		int[][] arr2 = {{5, 6}, {7, 8}};
		
		int[][] merge = merge(arr1, arr2);
		System.out.println("행 단위 병합 : " + Arrays.deepToString(merge));
	}
	
	public static int[][] merge(int[][] arr1, int[][] arr2){
		int[][] merge = new int[arr1.length + arr2.length][];
		
		// 첫 번째 배열 복사
		for(int i = 0; i < arr1.length; i++) {
			merge[i] = arr1[i];
		}
		// 두 번째 배열 복사
		for(int i = 0; i < arr2.length; i++) {
			merge[arr1.length + i] = arr2[i];
		}
		
		return merge;
	}
}

 


* 열 단위로 병합 : 두 배열을 병합할 때 각 행의 열을 이어붙이는 방식.

package Test;

import java.util.Arrays;

public class Main3 {

	public static void main(String[] args) {
		int[][] arr1 = {
				{1, 2}, {3, 4}
		};
		
		int[][] arr2 = {{5, 6}, {7, 8}};
		
		int[][] merge1 = merge1(arr1, arr2);
		System.out.println("행 단위 병합 : " + Arrays.deepToString(merge1));
		
		int[][] merge2 = merge2(arr1, arr2);
		System.out.println("열 단위 병합 : " + Arrays.deepToString(merge2));
	}
	
	public static int[][] merge1(int[][] arr1, int[][] arr2){
		int[][] merge = new int[arr1.length + arr2.length][];
		
		// 첫 번째 배열 복사
		for(int i = 0; i < arr1.length; i++) {
			merge[i] = arr1[i];
		}
		// 두 번째 배열 복사
		for(int i = 0; i < arr2.length; i++) {
			merge[arr1.length + i] = arr2[i];
		}
		
		return merge;
	}
	
	public static int[][] merge2(int[][] arr1, int[][] arr2){
		int[][] merge = new int[arr1.length][arr1[0].length + arr2[0].length];
		
		// 첫 번째 배열 열 복사
		for(int i = 0; i < arr1.length; i++) {
			for(int j = 0; j < arr1[i].length; j++) {
				merge[i][j] = arr1[i][j];
			}
		}
		// 두 번째 배열 열 복사
		for(int i = 0; i < arr2.length; i++) {
			for(int j = 0; j < arr2[i].length; j++) {
				merge[i][arr1[i].length + j] = arr2[i][j];
			}
		}
		
		return merge;
	}
}

 

결과

 

배열은 어렵다.....

'코딩 테스트' 카테고리의 다른 글

SQL 테스트 (2)  (0) 2024.12.30
SQL 테스트 (1)  (0) 2024.12.30
기본 알고리즘  (0) 2024.12.30