코딩/2-JAVA

C0703규칙찾기 ~ C0704셀프완전탐색입력

tree0505 2025. 6. 24. 11:47
반응형
    • C0703규칙찾기

  • C0703개념01맥스게임
package C0703규칙찾기;

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

public class C0703개념01맥스게임 {
	public static void main(String[] args) {
		
	    /*
	        [문제]
	            0~4 사이의 랜덤 숫자를 저장해 arr배열에서 그 위치의 값이
	            최대값인지 검사한다.
	            만약 최대값이면 그 위치의 값을 0으로 바꾸고,
	            전부 0이되면 종료한다. 
	            과정을 전부 출력하시오.
	        [예시]
	            랜덤 : 3
	            [11, 87, 42, 0, 24]

	            랜덤 : 0
	            [11, 87, 42, 0, 24]   <- 최대값이 아니므로 그대로 유지

	            랜덤 : 1
	            [11, 0, 42, 0, 24]

	            ...
	    */

		Random ran = new Random();
		
	    int[] arr = {11, 87, 42, 100, 24};
	    //arr배열에서 가장 큰 값을 선택하면 큰 값이 0이 되게 한다. 
	    	//100이 0이 되면. 그 다음 큰 값은 87 이 0이 된다. ....쭉 나간다. 
	    	//5번 맞추면 끝나는 게임이다. 
	    //이 모든 수가 0이 되면 끝난다.
	    //단, 가장 큰 수부터 0으로 만든다. 순서대로.

	    int count = 0; //5가 되면 끝난다. 
	    while(true) { //사용자가 무엇을 고를지 몰라서. while 
	        int index = ran.nextInt(arr.length);
	        //index는 랜덤으로 뽑는다. 
	        //인덱스를 고르고
	        System.out.println("랜덤 = " + index);
	        
	        //가장 큰 값과 그 인덱스 //가장 큰 값 찾고 
	        int maxNum = 0;
	        int maxIndex = 0;
	        for(int i=0; i<arr.length; i++) {
	            if(maxNum < arr[i]) {
	                maxNum = arr[i];
	                maxIndex = i;
	            }
	        }
	        
	        //서로 맞는지 본다. 
	        //가장 큰값과 내가 고른 값이 맞나? 
	        if(index == maxIndex) {
	            arr[index] = 0; //맞으면 0으로 변경 
	            count += 1; //갯수 증가 
	        }
	        System.out.println(Arrays.toString(arr));
	        System.out.println();
	        

	        if(count == arr.length) { //카운트가 5가 되면 종
	            break;
	        }
	    }

		
	}
}

    • C0703규칙찾기_개념연습

  • C0703개념연습01.java

 


  • C0704셀프완전탐색입력

  • C0704개념01추가
package C0704셀프완전탐색입력;


import java.util.Scanner;

/*
	[문제]
		arr 배열에 값을 1개씩 입력받아 저장한다.
		단, 5개 이상 추가할 수 없다.
*/

public class C0704개념01추가 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);	
		
		int[] arr = {0, 0, 0, 0, 0};	
		
		// (1) 값의 개수
		// (2) 다음 값을 추가할 위치
		int count = 0; //갯수 세기
		
		while(true) {
			for(int i=0; i<count; i++) {
				System.out.print(arr[i] + " "); //한번 출력 
			}
		
			System.out.println();
			System.out.println("1.추가");
			System.out.println("0.종료");
			
			int sel = scan.nextInt();
			if(sel == 0) {
				break;
			}
			else if(sel == 1) {
				if(count < 5) {
					System.out.print("[추가]값을 입력하세요 : ");
					int value = scan.nextInt();
					
					arr[count] = value;
					count += 1;
				}else {
					System.out.println("더이상 추가할 수 없습니다.");
				}
			}
		}
		
		scan.close();
		
	}
}

  • C0704개념02수정
package C0704셀프완전탐색입력;


import java.util.Scanner;

/*
	[문제]
		수정할 인덱스를 입력받고
		수정할 값을 입력받아 해당 위치의 값을 수정하시오.
*/

public class C0704개념02수정 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);	
		
		int[] arr = {21, 1, 67, 2, 0};	
		
		int count = 4;
		
		while(true) {
			for(int i=0; i<count; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();			
			System.out.println("1.수정");
			System.out.println("0.종료");
			
			int sel = scan.nextInt();
			if(sel == 0) {
				break;
			}
			else if(sel == 1) {
				System.out.print("[수정]인덱스를 입력하세요 : ");
				int index = scan.nextInt();
				
				if(0 <= index && index < count) {
					System.out.print("[수정]값을 입력하세요 : ");
					int value = scan.nextInt();
					
					arr[index] = value; 
				}else {
					System.out.println("인덱스를 잘못 입력했습니다.");
				}
			}
		}
		
		scan.close();
		
	}
}

  • C0704개념03삭제
package C0704셀프완전탐색입력;


import java.util.Scanner;

/*
	[문제]
		삭제할 위치(=인덱스)를 입력받거나
		삭제할 값을 입력받아 arr배열에서 삭제하시오.
*/

public class C0704개념03삭제 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);	
		
		int[] arr = {21, 1, 67, 2, 10};	
		//1을 삭제한다. 앞으로 땡기고 
		
		int count = 5; //count를 4로 바꿔 준다. 
		
		while(true) {
			for(int i=0; i<count; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			
			System.out.println("1.삭제(인덱스)");
			System.out.println("2.삭제(값)");
			System.out.println("0.종료");
			
			int sel = scan.nextInt();
			if(sel == 0) {
				break;
			}
			else if(sel == 1) {
				if(count > 0) {
					//인덱스로 삭제 
					System.out.print("[삭제]인덱스를 입력하세요 : ");
					int index = scan.nextInt();
				
					if(0 <= index && index < count) {
						for(int i=index; i<count - 1; i++) {
							arr[i] = arr[i + 1];
						}
						count = count - 1;
						//인덱스를 바로 받는다. 바로 삭제하면 된다. 
						//삭제는 인덱스로밖에 안된다. 
					}else {
						System.out.println("인덱스를 잘못 입력했습니다.");
					}
				}else {
					System.out.println("더이상 삭제할 값이 없습니다.");
				}
			}else if(sel == 2) {
				if(count > 0) {
					System.out.print("[삭제]값 입력하세요 : ");
					int value = scan.nextInt();
					
					int index = -1;
					for(int i=0; i<count; i++) {
						if(arr[i] == value) {
							index = i;
						}
					} //인덱스를 먼저 찾고 
					
					if(index == -1) {
						System.out.println("값을 잘못 입력했습니다.");
					}else {
						for(int i=index; i<count - 1; i++) {
							arr[i] = arr[i + 1];
						}
						count = count - 1;
						//삭제
					}
				}else {
					System.out.println("더이상 삭제할 값이 없습니다.");
				}
			}
		}
		
		scan.close();
		
	}
}

  • C0704개념04왼쪽오른쪽
package C0704셀프완전탐색입력;


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

/*
	[문제]
		아래 번호를 입력받아, 각 방향으로 0이 아닌 숫자를 모으시오.
		1)left 2)right
		
		예) 1)left
		   arr = {2,3,4,5,0,0,0,0,0}
		
		예) 2)right
		   arr = {0,0,0,0,0,2,3,4,5}
	
*/

public class C0704개념04왼쪽오른쪽 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int[] arr = {0,2,0,3,4,0,0,5,0};
		//0을 만날때까지 계속 자리를 바꾸는거다. 
		//0이 아닌것을 만날때까지. 
		
		while(true) {
			
			System.out.println(Arrays.toString(arr));
			
			System.out.println("1)left");
			System.out.println("2)right");
			System.out.println("0)exit");
			
			System.out.print("메뉴 선택 : ");
			int select = scan.nextInt();
			
			if(select == 1) {
				// [0, 2, 0, 3, 4, 0, 0, 5, 0]
				
				int index = 0;
				for(int i=0; i<arr.length; i++) {
					if(arr[i] != 0) { //0이 아닐때까지 계속 자리를 바꾸는것 
						int temp = arr[i];
						arr[i] = arr[index];
						arr[index] = temp;
						index += 1;
					}
				}
			}
			else if(select == 2) {
				int index = arr.length - 1;
				for(int i=arr.length - 1; i>=0; i--) {
					if(arr[i] != 0) {//0이 아닐때까지 계속 자리를 바꾸는것 
						int temp = arr[i];
						arr[i] = arr[index];
						arr[index] = temp;
						index -= 1;
					}
				}
			}
			else if(select == 0) {
				break;
			}
		}
		
		scan.close();
		
	}
}

  • C0704개념05하나만있는숫자제거
package C0704셀프완전탐색입력;


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

/*
	[문제]
		test배열에서 혼자 있는 숫자를 제거해
		temp배열에 저장하시오.
	[정답]
		test1 = {1, 2, 2, 1}
		test2 = {4, 4}
		test3 = {1, 1, 1, 1, 1}
*/

public class C0704개념05하나만있는숫자제거 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int[] test1 = {1, 2, 3, 2, 1};
		int[] test2 = {1, 3, 4, 4, 2};
		int[] test3 = {1, 1, 1, 1, 1};
		
		int[] temp = null;
		
		/*
		 	1. test1배열에서 혼자만 있는 숫자를 제외한
		 	   수의 개수를 구한다.
		 	   정답) 4개(3을 제외)
		 	2. 1번에서 구한 길이만큼 temp배열을 생성한다. (중요!)
		 	   temp = new int[4];
		 	3. temp배열에 3을 제외한 나머지 숫자를 순차적으로 저장한다.
		 	   temp = [1, 2, 2, 1]
		 */
		//똑같은것을 3번쓴거다. 
		while(true) {
			System.out.println("(1) test1 결과");
			System.out.println("(2) test2 결과");
			System.out.println("(3) test3 결과");
			System.out.println("(0) 종료");
			
			int choice = scan.nextInt();
			
			if(choice == 0) { break; }
			else if(choice == 1) {
				// 1, 2, 3, 2, 1
				int total = 0;
				for(int i=0; i<test1.length; i++) {
					int count = 0;
					for(int j=0; j<test1.length; j++) {
						if(test1[i] == test1[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						total += 1;
					}
				} //갯수 세기 
				System.out.println(total);
				//-----------------------------------
				//1보다 크면 그것만큼 배열을 만드는거다. 
				//count > 1 에 대한 배열을 만든다.
				temp = new int[total]; 
				int index = 0;
				for(int i=0; i<test1.length; i++) {
					int count = 0;
					for(int j=0; j<test1.length; j++) {
						if(test1[i] == test1[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						temp[index] = test1[i];
						index += 1;
					}
				}
				System.out.println(Arrays.toString(temp));
			}
			else if(choice == 2) {
				int total = 0;
				for(int i=0; i<test2.length; i++) {
					int count = 0;
					for(int j=0; j<test2.length; j++) {
						if(test2[i] == test2[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						total += 1;
					}
				}
				System.out.println(total);
				
				temp = new int[total];
				int index = 0;
				for(int i=0; i<test2.length; i++) {
					int count = 0;
					for(int j=0; j<test2.length; j++) {
						if(test2[i] == test2[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						temp[index] = test2[i];
						index += 1;
					}
				}
				System.out.println(Arrays.toString(temp));
			}
			else if(choice == 3) {
				int total = 0;
				for(int i=0; i<test3.length; i++) {
					int count = 0;
					for(int j=0; j<test3.length; j++) {
						if(test3[i] == test3[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						total += 1;
					}
				}
				System.out.println(total);
				
				temp = new int[total];
				int index = 0;
				for(int i=0; i<test3.length; i++) {
					int count = 0;
					for(int j=0; j<test3.length; j++) {
						if(test3[i] == test3[j]) {
							count += 1;
						}
					}
					if(count > 1) {
						temp[index] = test3[i];
						index += 1;
					}
				}
				System.out.println(Arrays.toString(temp));
			}
		}
		
		scan.close();
		
	}
}

 

반응형