코딩/2-JAVA

C0903정렬 , C0904이차배열완전탐색 , C0905그룹바이

tree0505 2025. 6. 25. 16:22
반응형
    • C0903정렬

  • C0903개념01_정렬_이차원_오름차순
package C0903정렬;

import java.util.Arrays;
import java.util.Collections;

public class C0903개념01_정렬_이차원_오름차순 {

	public static void main(String[] args) {
		/*
		        student배열은 이번 학기 중간고사 성적이다.
		        가로 한 줄을 기준으로 맨 앞은 번호이고, 뒤에 숫자 3개는
		        각각 국어, 수학, 영어 점수이다. 
		*/

		int[][] student = {
		    {1001, 100, 20, 32},        
		    {1002,  40, 43, 12},         
		    {1003,  60, 21, 42},         
		    {1004,  76, 54, 55},        
		    {1005,  23, 11, 76}          
		};
		
			
		 /*
		  	[문제]
	        	국어 점수순으로 오름차순정렬을 하시오.
			[정답]
				[1005, 23, 11, 76]
				[1002, 40, 43, 12]
				[1003, 60, 21, 42]
				[1004, 76, 54, 55]
				[1001, 100, 20, 32]

	    */
		/*
		  	int[][] 배열은 형변환없이 람다식 정렬이 가능하다.
		  	int[] 배열만 형변환한다. 
		 
		 */
		//Arrays.sort(1,2);
			//1번에는 배열을 넣는다. 
			//2번에는 (a,b)->{}
		//Arrays.sort(student, (a,b) -> {}); 
		
		// 내림차순은 -1 과 1을 서로 바꾸어 적으면된다. 
		Arrays.sort(student, (a , b)->{
			if(a[1] < b[1]) {
				return -1;
			}else if(a[1] > b[1]) {
				return 1;
			}else {
				return 0;				
			}
		});
		
		
		for(int i = 0; i < student.length; i++) {
			System.out.println(Arrays.toString(student[i]));
		}
			
	}

}

  • C0903개념02_다중정렬_이차원
package C0903정렬;

import java.util.Arrays;
import java.util.Collections;

public class C0903개념02_다중정렬_이차원 {

	public static void main(String[] args) {
		/*
		        student배열은 이번 학기 중간고사 성적이다.
		        가로 한 줄을 기준으로 맨 앞은 번호이고, 뒤에 숫자 3개는
		        각각 국어, 수학, 영어 점수이다. 
		*/

		int[][] student = {
		    {1001, 100, 20, 32},        
		    {1002,  40, 43, 12},         
		    {1003,  60, 21, 42},         
		    {1004,  76, 54, 55},        
		    {1005,  60, 11, 76}          
		};
		
		 /*
	        [다중정렬]
	        	다중정렬이란, 학생들 점수순으로 정렬한다고했을때, 
	        	똑같은 점수가 있을수있다. 
	        	그럼면 그다음 정렬기준을 정하는것을 다중정렬이라고한다.
	        	
	            다중정렬 연습을 위해 1003 번과 1005번의 국어점수를 둘다 60점으로 수정했다.  
	     */
		/*
	        [문제]
	            국어 점수순으로 오름차순정렬을 하시오.     
	            단, 국어점수가 같으면 수학점수로 오름차순정렬하시오.
	        [정답]
	        	[1002, 40, 43, 12]
				[1005, 60, 11, 76]
				[1003, 60, 21, 42]
				[1004, 76, 54, 55]
				[1001, 100, 20, 32]
	            
	    */
	    
	    
		
		Arrays.sort(student, (a , b)->{
			if(a[1] < b[1]) {
				return -1;
			}else if(a[1] > b[1]) {
				return 1;
			}else {
				if(a[2] < b[2]) {
					return -1;
				}else if(a[2] > b[2]) {
					return 1;
				}else {
					return 0;									
				}
				
			}
		});
		
		
		for(int i = 0; i < student.length; i++) {
			System.out.println(Arrays.toString(student[i]));
		}
			
	}

}

  • C0903개념03_정렬_이차원_문자_오름차순
package C0903정렬;

import java.util.Arrays;

public class C0903개념03_정렬_이차원_문자_오름차순 {
	public static void main(String[] args) {
		/*
		        member 배열은 회원목록 리스트이다. 
		        데이터는 순서대로 번호, 이름, 등급 이다.
		
		*/
		
		String[][] member = {
		    {"1001", "김철수", "A"},         
		    {"1002", "이만수", "B"},         
		    {"1003", "오수정", "C"},        
		    {"1004", "박만삼", "A"},         
		    {"1005", "이영희", "B"},
		    {"1006", "송민아", "B"},         
		    {"1007", "이영희", "A"},        
		    {"1008", "이만수", "A"},             
		};
		
		/*
		  	[문제]
		  		학생들을 이름순으로 오름차순 정렬하시오.
		  	[정답]
		  		[1001, 김철수, A]
				[1004, 박만삼, A]
				[1006, 송민아, B]
				[1003, 오수정, C]
				[1002, 이만수, B]
				[1008, 이만수, A]
				[1005, 이영희, B]
				[1007, 이영희, A]

		 
		 */
		//문자열 
			//문자열은 크다 작다를 할 수 없다. 
			//compareTo을 쓴다. 
		
		Arrays.sort(member , (a , b)->{
			if(a[1].compareTo(b[1]) < 0) {
				//
				return -1;
			}
			else if(a[1].compareTo(b[1]) > 0) {
				return 1;
			}else {
				return 0;
			}
		});
		
		for(int i = 0; i < member.length; i++) {
			System.out.println(Arrays.toString(member[i]));
			
		}
		
	}
}

  • C0903개념04_다중정렬_이차원_문자
package C0903정렬;

import java.util.Arrays;

public class C0903개념04_다중정렬_이차원_문자 {
	public static void main(String[] args) {
		/*
		    member 배열은 회원목록 리스트이다. 
		    데이터는 순서대로 번호, 이름, 등급 이다.
		
		*/
		
		String[][] member = {
		{"1001", "김철수", "A"},         
		{"1002", "이만수", "B"},         
		{"1003", "오수정", "C"},        
		{"1004", "박만삼", "A"},         
		{"1005", "이영희", "B"},
		{"1006", "송민아", "B"},         
		{"1007", "이영희", "A"},        
		{"1008", "이만수", "A"},             
		};
		
		/*
			[문제]
				학생들을 이름순으로 오름차순 정렬하시오.
				단, 이름이 같으면 등급순으로 오름차순하시오.
			[정답]
				[1001, 김철수, A]
				[1004, 박만삼, A]
				[1006, 송민아, B]
				[1003, 오수정, C]
				[1008, 이만수, A]
				[1002, 이만수, B]
				[1007, 이영희, A]
				[1005, 이영희, B]

		
		
		*/
		
		Arrays.sort(member , (a , b)->{
			if(a[1].compareTo(b[1]) < 0) {
				return -1;
			}
			else if(a[1].compareTo(b[1]) > 0) {
				return 1;
			}else {
				if(a[2].compareTo(b[2]) < 0) {
					return -1;
				}
				else if(a[2].compareTo(b[2]) > 0) {
					return 1;
				}else {
					return 0;
				}
			}
		});
		
		for(int i = 0; i < member.length; i++) {
			System.out.println(Arrays.toString(member[i]));
		
		}
	}
}

  • C0904이차배열완전탐색

  • C0904개념01_이차배열완전탐색
package C0904이차배열완전탐색;

import java.util.Arrays;

public class C0904개념01_이차배열완전탐색 {

	public static void main(String[] args) {
		/*
        student배열은 이번 학기 중간고사 성적이다.
        가로 한 줄을 기준으로 맨 앞은 번호이고, 뒤에 숫자 3개는
        각각 국어, 수학, 영어 점수이다. 
		*/
		
		int[][] student = {
		    {1001, 100, 20, 32},        
		    {1002,  40, 43, 12},         
		    {1003,  60, 21, 42},         
		    {1004,  76, 54, 55},        
		    {1005,  23, 11, 76}          
		};
		
		int[] search = {1002, 1004, 1003, 1001, 1005};
		/*
		 	[문제]
	        	search 배열은 학생들이 시험 결과가 궁금해서  검색한 번호들이다. 
	        	각 학생이 검색한 순서대로 학생정보를 출력하시오.
	    	[정답]
	        	1002,40,43,12
	        	1004,76,54,55
	        	1003,60,21,42
	        	1001,100,20,32
	        	1005,23,11,76
		 */
		 
		for(int i=0; i<search.length; i++) {
	        
	        for(int j=0; j< student.length; j++) {
	            
	            if(search[i] == student[j][0]) {
	            	System.out.println(Arrays.toString(student[j]));
	            }
	        }
	    }
		
	}

}

  • C0904개념02_이차배열완전탐색
package C0904이차배열완전탐색;

import java.util.Arrays;

public class C0904개념02_이차배열완전탐색 {

	public static void main(String[] args) {
		/*
			student 배열은 순서대로 ["번호", "이름", "성별"] 의 데이터 이고, 
			score 배열은 순서대로 ["번호", "국어", "수학"] 의 데이터이다.
		*/
		/*
			[문제] 
				학생번호 , 이름 , 점수 두개를 출력하시오. 
				
			[정답]
				[1001, 이만수, 10, 20]
				[1002, 이영희, 70, 30]
				[1003, 김민정, 64, 65]
				[1004, 이철민, 13, 87]
				[1005, 오만석, 49, 80]
				[1006, 최이슬, 14, 90]
		*/
	
		String[][] student = {	
			{"1001", "이만수", "남"},
			{"1002", "이영희", "여"},
			{"1003", "김민정", "여"},
			{"1004", "이철민", "남"},
			{"1005", "오만석", "남"},
			{"1006", "최이슬", "여"}
		};
		
		int[][] score = {		
			{1001 , 10, 20},
			{1002 , 70, 30},
			{1003 , 64, 65},
			{1004 , 13, 87},
			{1005 , 49, 80},
			{1006 , 14, 90}
		};
	
		/*
		  	위와 같이 배열이 두개가 데이터를 나눠서 가지고있다면,
		  	하나의 새로운 배열에 저장하는것이 좋다. 
		 
		 */
		
		String[][] viewList = new String[student.length][4];
		//새로운 배열을 만든다.
		
		for(int i = 0; i < student.length; i++){
			viewList[i][0] = student[i][0];
			viewList[i][1] = student[i][1];
			viewList[i][2] = score[i][1] + ""; //"" => 강제 형변환. 문자열
			viewList[i][3] = score[i][2] + "";
			
		}
	
		for(int i = 0; i < viewList.length; i++){
			System.out.println(Arrays.toString(viewList[i]));
		}
	
	}

}

  • C0904개념03_정렬
package C0904이차배열완전탐색;

import java.util.Arrays;

public class C0904개념03_정렬 {

	public static void main(String[] args) {
		/*
			student 배열은 순서대로 ["번호", "이름", "성별"] 의 데이터 이고, 
			score 배열은 순서대로 ["번호", "국어", "수학"] 의 데이터이다.
		*/
		/*
			[문제] 
				학생번호 , 이름 , 점수 두개를 출력하시오. 
				단, 국어 점수가 높은순으로 내림차순 정렬하시오.
				국어 점수가 같으면 수학점수가 높은순으로 내림차순정렬하시오.
				
			[정답]
				[1002, 이영희, 70, 30]
				[1005, 오만석, 64, 80]
				[1004, 이철민, 64, 87]
				[1003, 김민정, 64, 65]
				[1006, 최이슬, 14, 90]
				[1001, 이만수, 10, 20]
		*/
	
		String[][] student = {	
			{"1001", "이만수", "남"},
			{"1002", "이영희", "여"},
			{"1003", "김민정", "여"},
			{"1004", "이철민", "남"},
			{"1005", "오만석", "남"},
			{"1006", "최이슬", "여"}
		};
		
		int[][] score = {		
			{1001 , 10, 20},
			{1002 , 70, 30},
			{1003 , 64, 65},
			{1004 , 64, 87},
			{1005 , 64, 80},
			{1006 , 14, 90}
		};
	
		/*
		  	위와 같이 배열이 두개가 데이터를 나눠서 가지고있다면,
		  	하나의 새로운 배열에 저장하는것이 좋다. 
		 
		 */
		
		String[][] viewList = new String[student.length][4];
	
		for(int i = 0; i < student.length; i++){
			viewList[i][0] = student[i][0];
			viewList[i][1] = student[i][1];
			viewList[i][2] = score[i][1] + "";
			viewList[i][3] = score[i][2] + "";
			
		}
		
		Arrays.sort(viewList , (a , b)->{
			if(a[2].compareTo(b[2]) < 0) {
				return 1;
			}
			else if(a[2].compareTo(b[2]) > 0) {
				return -1;
			}else {
				if(a[1].compareTo(b[3]) < 0) {
					return 1;
				}
				else if(a[1].compareTo(b[3]) > 0) {
					return -1;
				}else {
					return 0;
				}
			}
		});
		
	
		for(int i = 0; i < viewList.length; i++){
			System.out.println(Arrays.toString(viewList[i]));
		}
	
	}

}

  • 배열_개념16_2차원정렬
package C0904이차배열완전탐색;

import java.util.Arrays;
import java.util.Random;

public class 배열_개념16_2차원정렬 {
	public static void main(String[] args) {
		
		int[][] darr = {
			{43, 35, 50},
			{36, 76, 37},
			{98, 25, 19}
		};
		
		// 1. 2차원배열의 크기만큼 1차원배열을 생성한다.
		int[] arr = new int[9];
		
		// 2. 2차원배열의 값을 생성한 1차원 배열에 저장한다.
		int index = 0;
		for(int i=0; i<darr.length; i++) {
			for(int j=0; j<darr[i].length; j++) {
				arr[index] = darr[i][j];
				index += 1;
			}
		}
		System.out.println(Arrays.toString(arr));
		
		// 3. 1차원배열 정렬 알고리즘을 사용해 정렬한다.
		for(int i=0; i<arr.length; i++) {
			int maxNum = arr[i];
			int maxIndex = i;
			for(int j=i; j<arr.length; j++) {
				if(maxNum < arr[j]) {
					maxNum = arr[j];
					maxIndex = j;
				}
			}
			int temp = arr[i];
			arr[i] = arr[maxIndex];
			arr[maxIndex] = temp;
		}
		System.out.println(Arrays.toString(arr));
		
		// 4. 마지막으로 1차원배열의 값을 2차원 배열에 순차적으로 저장한다.
		index = 0;
		for(int i=0; i<darr.length; i++) {
			for(int j=0; j<darr[i].length; j++) {
				darr[i][j] = arr[index];
				index += 1;
			}
		}
		
		// 5. 출력
		for(int i=0; i<darr.length; i++) {
			System.out.println(Arrays.toString(darr[i]));
		}
		
	}
}

  • C0905그룹바이
    • 집계
    • 중복이 안되게 모아야 한다. 

  • C0905개념01_그룹바이
package C0905그룹바이;

import java.util.Arrays;

public class C0905개념01_그룹바이 {
	public static void main(String[] args) {
		
	    /*
	        [문제]
	            memberList는 회원목록데이터이다.
	            순서대로 회원번호 , 회원이름 이다.

	            itemList은 쇼핑몰 판매상품데이터이다.
	            순서대로 상품번호 , 상품이름 이다.

	            orderList는 오늘 주문 목록이다. 
	            순서대로 주문한 회원번호, 주문한 상품번호이다.
	            
	            상품별 판매개수를 출력하시오.
	            [상품번호, 상품이름 , 판매개수] 를 출력한다. 
	            단, 판매개수가 0인 상품은 출력하지않는다. 
	            단, 판매개수가 높은순으로 내림차순 출력한다. 
	            판매개수가 같으면 번호가낮은순으로 오름차순한다. 
	            
	        [정답] 
				[100001, 고래밥, 5]
				[100002, 새우깡, 2]
				[100003, 감자깡, 2]
				[100004, 칸쵸, 2]
				[100007, 고구마깡, 2]
				[100006, 빼빼로, 1]
	    */
	    String[][] memberList = {
	        {"3001","이만수"},
	        {"3002","김철민"},
	        {"3003","이영희"},
	        {"3004","조성아"},
	        {"3005","박민재"},
	        {"3006","유재석"}
	    };

	    String[][] itemList = {
	        {"100001", "고래밥"},
	        {"100002", "새우깡"},
	        {"100003", "감자깡"},
	        {"100004", "칸쵸"},
	        {"100005", "오징어땅콩"},
	        {"100006", "빼빼로"},
	        {"100007", "고구마깡"},
	        {"100008", "포카칩"}
	    };

	    int[][] orderList = {
	        {3001, 100001},
	        {3001, 100002},
	        {3003, 100001},
	        {3002, 100007},
	        {3003, 100006},
	        {3005, 100007},
	        {3002, 100001},
	        {3001, 100003},
	        {3003, 100002},
	        {3001, 100001},
	        {3002, 100003},
	        {3001, 100004},
	        {3003, 100004},
	        {3004, 100001}
	    };

	    String[][] viewList = new String[itemList.length][3];
	    //새로운 테이블을 만든다. 
	    
	    for(int i = 0; i < itemList.length; i++){
	    	viewList[i][0] = itemList[i][0];
	    	viewList[i][1] = itemList[i][1];
	    	viewList[i][2] = "0";
	    }

	    for(int i = 0; i < viewList.length; i++){
	    	System.out.println(Arrays.toString(viewList[i]));
	    }
	    System.out.println();
	    
	    //완전탐색
	    for(int i = 0; i < viewList.length; i++){
	        for(int j = 0; j < orderList.length; j++){
	        	int number = Integer.parseInt(viewList[i][0]);
	            if(number == orderList[j][1]){
	            	//문자였기 때문에. 형변환 주의 
	            	int count = Integer.parseInt(viewList[i][2]);
	            	count += 1;
	                viewList[i][2] = count + "";
	            }
	        }
	    }
	    
	    //정렬 
	    Arrays.sort(viewList, (a, b) -> {
	    	if(a[2].compareTo(b[2]) < 0) {
	    		return 1;
	    	} else if(a[2].compareTo(b[2]) > 0) {
	    		return -1;
	    	} else {
	    		if(a[0].compareTo(b[0]) < 0) {
	    			return -1;
	    		} else if(a[0].compareTo(b[0]) > 0) {
	    			return 1;
	    		} else {
	    			return 0;
	    		}
	    	}
	    	
	    });
	    
	    for(int i = 0; i < viewList.length; i++){
	    	int count = Integer.parseInt(viewList[i][2]);
	    	if(count > 0) {
	    		System.out.println(Arrays.toString(viewList[i]));
	    	}
	    }
		
	}
}

 

반응형