투케이2K

20. (TWOK/ALGORITHM) [Java] K번째수 - 이차원 배열 (다차원 배열) , Arrays copyOfRange 배열 복사 본문

투케이2K 알고리즘

20. (TWOK/ALGORITHM) [Java] K번째수 - 이차원 배열 (다차원 배열) , Arrays copyOfRange 배열 복사

투케이2K 2022. 7. 14. 08:02

[환경 설정 및 설명]

언 어 : Java

설 명 : K번째수 - 이차원 배열 (다차원 배열) , Arrays copyOfRange 배열 복사

 

[소스 코드]

package ex5;

import java.util.Arrays;

public class MainActivity22 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [K번째수]
		 * 1. 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다
		 * 2. 전체 배열이 [1, 5, 2, 6, 3, 7, 4] 경우 >> [2, 5, 3] 조건 시 >> 2번째부터 5번째까지 (5, 2, 6, 3) 자르고 >> 
		 *    오름차순 (작은) 정렬 후 (2, 3, 5, 6)  >> 3번째 값을 출력
		 * 3. 입출력 예 : 
		 *    array : [1, 5, 2, 6, 3, 7, 4]
		 *    commands : [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
		 *    return : [5, 6, 3]  
		 * */
		
		// 초기 배열 변수 선언 실시
		int total_arr[] = {1, 5, 2, 6, 3, 7, 4};		
		int cmd_arr[][] = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}}; //3행 3열 
		
		// 결과 출력 메소드 호출 실시
		System.out.println("결과 : " + Arrays.toString(solution(total_arr, cmd_arr)));
		
	}// 메인 종료
	
	public static int[] solution(int t[], int c[][]) {
		// 결과를 반환할 배열 선언
		int result[] = new int[c.length]; //인풋으로 들어온 커맨드 길이만 큼 결과를 리턴해야한다
		
		// 인풋으로 들어온 데이터 확인 실시
		System.out.println("total_arr : " + Arrays.toString(t)); // Arrays.toString 1차원 배열 데이터 출력
		System.out.println("cmd_arr : " + Arrays.deepToString(c)); // Arrays.deepToString 2차원 배열 데이터 출력
		System.out.println("");
		
		
		// 반복문을 수행하면서 데이터 확인 실시
		for (int i=0; i<c.length; i++) {
			/**
			 * [배열 번지 및 Arrays.copyOfRange 설명]
			 * 1. 인풋으로 들어온 이차원 배열 번지 설명 (3행 3열 구성) 
			 *    [2 (0,0), 5 (0,1), 3 (0,2)] 
			 *    [4 (1,0), 4 (1,1), 1 (1,2)]
			 *    [1 (2,0), 7 (2,1), 3 (2,2)]
			 * 2. Arrays.copyOfRange(원본배열, 시작인덱스, 종료 인덱스) : 배열을 복사합니다
			 * 3. 로직 : 각 배열 start, end, select 번지에 해당되는 값을 출력 >> 배열 복사 >> 정렬 >> 데이터 추출
			 * */		
			
			
			// 각 start , end, select 값 출력 실시
			int startIdx = c[i][0]; // 2, 4, 3
			int endIdx = c[i][1]; // 5, 4, 7
			int selectIdx = c[i][2]; // 3, 1, 3
			System.out.println("start idx : " + startIdx);
			System.out.println("end idx : " + endIdx);
			System.out.println("select idx : " + selectIdx);
			
			
			// 출력된 값으로 배열 복사 실시
			// 원본 : [1, 5, 2, 6, 3, 7, 4]
			// 조건 [2, 5, 3] : [5, 2, 6, 3] 뽑혀야합니다
			// 조건 [4, 4, 1] : [6] 뽑혀야합니다
			// 조건 [1, 7, 3] : [1, 5, 2, 6, 3, 7, 4] 뽑혀야합니다
			int copy[] = Arrays.copyOfRange(t, startIdx-1, endIdx); //배열은 0번지부터 시작하므로 -1을 수행해야합니다
			System.out.println("배열 복사 : " + Arrays.toString(copy));
			
			
			// 배열 데이터 정렬 실시
			Arrays.sort(copy);
			System.out.println("배열 정렬 : " + Arrays.toString(copy));			
			
			
			// selectIdx 사용해 정렬된 데이터에서 특정 값 출력
			System.out.println("특정 값 : " + copy[selectIdx-1]); //배열은 0번지부터 시작하므로 -1을 수행해야합니다
			System.out.println("");	
			
			
			// 마지막으로, 반환 배열에 데이터 삽입 실시
			result[i] = copy[selectIdx-1];
		}
					
		// 결과 반환 실시
		return result;			
	}

}// 클래스 종료

 


[참고 사이트]

https://kkh0977.tistory.com/1032

 

214. (java/자바) 알고리즘 : K번째수 - 이차원 배열 (다차원 배열) , Arrays copyOfRange 배열 복사

[ 개발 환경 설정 ] ​ 개발 툴 : Eclipse 개발 언어 : Java [소스 코드] ​ package ex5; import java.util.Arrays; public class MainActivity22 { public static void main(String[] args) { // TODO Auto-gen..

kkh0977.tistory.com

 


 

반응형
Comments