[day 06]

1. 배열 array

1) 다차원 배열
: 정방배열

*선언*                   열열열
int [행][렬] arr;      행
int arr [][];        행
            






2) 가변 배열
: 비 정방배열, 길이가 다른 배열

 

 

package day06;

public class T123 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int [][] arr4 = new int [2][3];
		
		System.out.println(arr4.length);
	}
}

 

 

package day06;

public class Test50 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

/*
	//	System.out.println(args[1]);
		// 정방배열
		// 선언
		int [][] arr = new int[2][3];
		arr[0][0]=100;
		arr[0][1]=200;
		arr[0][2]=300;
		arr[1][0]=400;
		arr[1][1]=500;
		arr[1][2]=600;
		System.out.println(arr[1][2]);
		
	
			// 초기화
		int[][] arr2= {{10,20,30 },{40,50,60}};
		System.out.println(arr2);     //주소값 나옴
		System.out.println(arr2[0]);  // 주소값 나옴
		System.out.println(arr2.length);  //행의 길이
		System.out.println(arr2[0].length); // 정방에서 열의 길이
	
	*/
		
		// 가변배열 : 행크기 지정, 열은 추후에
		int [][]arr3 = new int[2][];
		arr3[0] = new int[2];    //0번행에 열 2개
		arr3[1] = new int[3];    //1번행에 열 3개
		arr3[0][0] = 1;
		arr3[0][1] = 2;
		arr3[1][0] = 3;
		arr3[1][1] = 4;
		arr3[1][2] = 5;
		
			//초기화
		int [][] arr2 = {{10,20},{30,40,50}};
		System.out.println("arr2.length :" + arr2.length);
		System.out.println(arr2[0].length);
		System.out.println(arr2[1].length);
		for(int i = 0; i < arr2.length; i++) {//행
			for(int j = 0; j< arr2[i].length;j++) {
				System.out.println(arr2[i][j]);
			}
		}
	}
}

 

package day06;

import java.util.Scanner;

public class Test51 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// * (비)정방배열 문제 *
	      // 문제1. 아래와 같은 형태의 정방배열을 만들어 값을 저장하고 출력해보세요. 
	      /*
	         10 20 30 
	         40 50 60
	         70 80 90
	      */
	      // 문제2. int 형 3행 2열의 정방배열을 만들고 
	      //         각 방에 정수를 입력받아 저장하고 출력하세요. 
	      
	      // 문제3. 아래와 같은 형태의 비정방배열을 만들어 
	      //      아래와 같이 값을 저장하고 출력하세요. 
	      /*
	         10 11 12
	         20 21
	         30 31 32
	         40 41 
	      */
	      
	      // 문제4. 한층에 5호씩있는 3층짜리 아파트가 있다. 
	      // 1) 배열로 만들어서 각각 호마다 관리비를 입력받고, 전체 출력해보세요. 
	      // 2) 층별 관리비 평균을 구해서 출력해보세요. 
	      // 3) 전체 관리비 평균을 구해서 출력해보세요. 
	      // 4) 103호와 203호의 관리비가 서로 바뀌었다합니다. 교환해주세요. 
	      // 5) 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요. 
	      // 6) 관리비 가장 적게 나온 호수와 가장 많이 나온 호수를 출력하세요. 
	      // 7) (심화) 관리비 적게 나온 순으로 정렬해보세요. 
	      
		
		//1번 문제
/*
		int [][] arr = {{10,20,30},{40,50,60},{70,80,90}};
		for(int i = 0; i < arr.length; i++) {//행
			for(int j = 0; j< arr[i].length;j++) {
				System.out.println(arr[i][j]);
			}
		}
*/		
	    // 문제2. int 형 3행 2열의 정방배열을 만들고 
	    //         각 방에 정수를 입력받아 저장하고 출력하세요. 
	/*	
		int [][]arr2 = new int[3][2];
		Scanner sc = new Scanner (System.in);
			System.out.println("[0][1] 입력>");
			int num1 = sc.nextInt();
			arr2[0][1] = num1 ;
			
			System.out.println("[0][1] 입력>");
			int num2 = sc.nextInt();
			arr2[0][2] = num2 ;
			
			System.out.println("[1][0] 입력>");
			int num3 = sc.nextInt();
			arr2[1][0] = num3 ;
		*/			
	/*	int [][]arr2 = new int[3][2];
		Scanner sc = new Scanner (System.in);
		for(int i=0 ; i<arr2.length; i++) {
			for(int j=0; j<arr2[i].length; j++) {
				System.out.println(i+"행" + j+"렬" + "를 입력하세요" );
				arr2[i][j] = sc.nextInt();
			}
		}
		sc.close();
		
		for(int i = 0; i < arr2.length; i++) {//행
			for(int j = 0; j< arr2[i].length;j++) {
				System.out.println(arr2[i][j]);
			}
		}
		
		 10 11 12
	     20 21 (22)
	     30 31 32
	     40 41 (42)
	*/	//3번문제
/*		int [][]arr3 = new int[4][3];
		int i, j;
		for(i=0 ; i<arr3.length; i++) {
			
			
			for(j=0; j<arr3[i].length; j++) {
				
				System.out.print((i+1)+""+ j+" " );
			}System.out.println(" ");
		}
*/		
/*
			if(2%(i+1)==0) {
				for(j=0; j<arr3[i].length; j++) {
					for(j=0; j<arr3[i].length; j++) {
					System.out.print((i+1)+""+ j );
					
					}System.out.println(" ");
				}
				
			}else {
				for(i=0 ; i<arr3.length; i++) {
				}
					for(j=0; j<3; j++) {
					
					System.out.print((i+1)+""+ j );
				}System.out.println(" ");
				
			}
		}
*/			
		
		
		   // 문제4. 한층에 5호씩있는 3층짜리 아파트가 있다. 
	      // 1) 배열로 만들어서 각각 호마다 관리비를 입력받고, 전체 출력해보세요. 
	      // 2) 층별 관리비 평균을 구해서 출력해보세요. 
	      // 3) 전체 관리비 평균을 구해서 출력해보세요. 
	      // 4) 103호와 203호의 관리비가 서로 바뀌었다합니다. 교환해주세요. 
	      // 5) 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요. 
	      // 6) 관리비 가장 적게 나온 호수와 가장 많이 나온 호수를 출력하세요. 
		int [][] arr4 = new int [2][3];
		
		Scanner sc = new Scanner (System.in);
		int total = 0; // 
		int tot = 0;
		int i, j = 0;
		for( i=0; i<arr4.length; i++) {
				
			for(j=0; j<arr4[i].length; j++) {
				
				System.out.println((i+1)+"층" + (j+1)+"호" + "관리비" );
				arr4[i][j] = sc.nextInt();
				tot += arr4[i][j];
				total += arr4[i][j];
			}//2번
			System.out.println((i+1)+"층 전체 관리비는"+tot );
			System.out.println((i+1)+"층 전체 평균값은"+(double)(tot/arr4[i].length));
			
		
		} //3번
		System.out.println("모든층 전체 평균값은"+(double)(total/(arr4.length*arr4[0].length)));
		System.out.println(arr4[0][2]);
		//4번
		int tmp = arr4[0][2];
		arr4[0][2] = arr4[1][2];
		arr4[1][2] = tmp;
		System.out.println(arr4[0][2]);
		
		
		
		//5번 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요. 
		for( i=0; i<arr4.length; i++) {
			
			for(j=0; j<arr4[i].length; j++) {
				if(arr4[i][j]<(total/(arr4.length*arr4[i].length))) {
			System.out.println((i+1)+"동"+(j+1)+"호"+ arr4[i][j]);
			System.out.println("관리비가 적은 호수는"+(i+1)+"동"+(j+1)+"호");
				}
			}
		}
	/*	sc.close();
		//4-1
		
		for(int i = 0; i < arr4.length; i++) {//행
			for(int j = 0; j< arr4[i].length;j++) {
			
			
			System.out.println((i+1)+ "층 관리비 총합은" +tot);
			System.out.println((i+1)+ "층 관리비 평균은" +tot%arr4[i].length);
			System.out.println("다음층");
			}
		}
       
		for(int i = 0; i < arr4.length; i++) {//행
			for(int j = 0; j< arr4[i].length;j++) {
				System.out.println(arr4[i][j]);
				
			}
		}
		*/
	}
}

 

 

package day06;

import java.util.Scanner;

public class Test52 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// * 1차원 배열 문제 *
	      // 문제1-1. arr이라는 이름의 방 5개짜리 배열에 
	      //         사용자로부터 서로다른 5개의 정수를 입력받아 저장하고 출력해보세요. 
	      
	      // 문제1-2. 위에서 만들 배열 arr에 저장된 값을 오름차순으로 정렬해보세요. 
	      
	      // 문제1-3. 정수 한개를 더 입력받아 저장해보세요. 
	      //         입력받은 정수는 기존 arr 배열의 마지막 데이터 다음방에 저장되어야한다. 
	      //         (즉, 배열크기가 6개가 되어야한다. 단, 배열은 방크기 변경X) 
			int [] arr = {2, 6, 10, 32, 51};
			int [] tmp = arr;
			arr = new int [6]; // 6개 짜리 새 방만들기
			
			for(int i = 0; i < tmp.length; i++) {
				arr[i] = tmp[i];
			}
			arr[5] = 200; //마지막 방에 입력받아 저장
			
		
		
	      
	      // 문제2-1. 게임랭킹보드. 각 5개의 데이터를 저장할 수 있는 
	      //         users와 scores라는 이름의 배열이 있고, 
	      //         users배열에는 유저이름, scores 배열에는 유저의 게임점수를 입력받아 저장한다. 
	      //         단, 유저이름과 게임점수는 배열 인덱스상 서로 일치하게. 
	      
	      // 문제2-2. 위 저장된 users와 scores를 아래와 같은 형태로 출력해보세요. 
	      /*
	         user_name   score
	         --------------------
	         피카츄      87
	         파이리      24
	         .....
	      */
	      
	      // 문제2-3. 두번째 유저의 점수와 세번째 유저의 점수가 서로 바뀌었다합니다. 
	      //         교환해주세요. 
	      
	      // 문제2-4. 점수가 높은 순으로 출력되는 게임 랭킹 보드를 출력해주세요. 
	      /*         랭킹보드는 1위부터 5위까지 출력 
	         rank   user_name   score
	         ----------------------------
	         1      꼬북이      96
	         2      피카츄      87
	         .....
	      */
	      
	      // 문제2-5. 또 한명의 유저가 게임을 끝냈습니다. 
	      //         점수와 유저이름을 입력받고, users와 scores 배열에 추가 저장.
	      //         (문제 1-3. 참고 : 배열길이 6개로) 
	      //         게임 랭킹보드를 업데이트해 5위까지 출력해주세요. 

		int [][]arr2 = new int[3][2];
		Scanner sc = new Scanner (System.in);
		for(int i=0 ; i<arr2.length; i++) {
			for(int j=0; j<arr2[i].length; j++) {
				System.out.println(i+"행" + j+"렬" + "를 입력하세요" );
				arr2[i][j] = sc.nextInt();
			}
		}
		sc.close();
		
		for(int i = 0; i < arr2.length; i++) {//행
			for(int j = 0; j< arr2[i].length;j++) {
				System.out.println(arr2[i][j]);
			}
		}
	}	
}

 

 

package day06;

public class Test53 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	// 랜덤 : 난수 : 임의의 수  : 0~ 1 사이 실수의 값으로 돌려줌.
		for(int i = 0; i<10; i++) {
		//System.out.println(Math.random());
		
	// 0~9 사이 랜덤값
		
	//	System.out.println((int)(Math.random()*10));
		
		
	// 1~5 사이 랜덤값	  0- 4     1-5
	//	System.out.println((int)(Math.random()*10)/2+1);
		
	// 12~ 17 사이 랜덤값	  1- 10   0- 5  12 -17
		// System.out.println(((int)(Math.random()*10)+1)/2+12);
		//== System.out.println(((int)(Math.random()*6+12);
		}
	}
}

 

 

 

package day06;

import java.util.Scanner;

public class Test54 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	     // 문제1. 아래와같이 2차원 배열 arr을 출력하는 프로그램을 작성하세요. 
	     
	/*
	         1
	         1 2 3
	         1
	         1 2 3 4
	         1 2   
		int [][]arr = new int[4][];
		arr[0] = new int[0];
		arr[0][0] = 1;
				
		arr[1] = new int[2];
		arr[1][0]= 1;
		arr[1][1]= 2;
		arr[1][2]= 3;
		arr[2] = new int[0];
		arr[2][0] = 1;
		
		arr[3] = new int[3];
		arr[3][0] = 1;		
		arr[3][1] = 2;
		arr[3][2] = 3;
		arr[3][3] = 4;
		
		arr[4] = new int[1];
		arr[4][0] = 1;
		arr[4][1] = 2; 
		 
	     int [][]arr = new int [][]{
	     	{1},
	     	{1},{2},{3}
	     	{1},
	     	{1},{2},{3},{4}
	         {1},{2}
	         }
	    */     
	    
	      // 문제2. Scanner로 소문자 알파벳 하나 입력받고, 
	      //      아래와 같이 출력하는 프로그램을 작성하세요. 
	  /*     
	         소문자 알파벳 하나를 입력하세요 >>   e  <- 콘솔에 입력 
	      a abcde
	         abcd
	         abc
	         ab
	         a
	         
	         sca
	         
	         sc
	        
		Scanner sc = new Scanner (System.in);
		System.out.println("알파벳을 입력하세요>>");
		
		char a = sc.nextLine().charAt(0); //아스키코드 변환
		int b = (int)a;
		
		for (int i = 97; i <= b; i++ ) {
			System.out.print((char)i+" ");
		}
		
	*/		
			
	      // 문제3. 양의 정수 10개를 입력받아 배열에 저장하고, 
	      //       3의 배수만 출력하는 프로그램을 작성하세요. 
   /*   
		Scanner sc = new Scanner (System.in);
		int arr[]= new int [9];
		
		
		
		for(int i=0; i<arr.length;i++) {
		System.out.println((i+1)+"번째 양의 정수를 입력하세요>>");
		arr[i] = sc.nextInt();
		}
		
		for(int i=0; i<arr.length;i++) { 
			if (arr[i]%3==0) {
			System.out.println(arr[i]);
			}
	}
	*/	
	      // 문제4. 4x4의 2차원 배열(총16개방)을 만들고, 
	      //      1 ~ 10 까지 범위의 정수를 10개만 
	      //      랜덤하게 생성하여 임의의 위치에 저장하세요. 
	      //      동일한 정수가 있어도 상관없으나, 
	      //      나머지 6개의 숫자는 모두 0으로 만들고 
	      //      4x4의 형태로 출력하세요. 
	      /*
	         출력예시)
	         3   0   7   2
	         0   9   1   4
	         2   4   0   5
	         0   8   0   0
	      */ 
	int[][]arr4 = new int [4][4];
	int[]temp = new int [10];
	int i,j=0;
	int count = 0;
		// 보드판 모두 0으로 초기화
		  for(i=0; i<arr4.length;i++ ) {
			  	for(j=0; j<arr4[i].length;j++){
				arr4[i][j] = 0;
				} 	
		}
			
	
	 // 10개 랜덤 생성
	      for(i=0; i<temp.length;i++ ) {
	    	 
	    		  temp[i] =((int)(Math.random()*10)+1);	
	      }
	      // 10개 랜덤을 보드에 넣기
	      for(i = 0; i<temp.length; i++)
	      //보드의 임의의 위치
	    	  // 행 0~3렬 /렬 0~3렬
    	  int x =  (int)(Math.random()*4); //행 인덱스 랜덤
	      int y =  (int)(Math.random()*4); //행 인덱스 랜덤
	      // 중복체크 : 같은 자리가 다시 뽑히면 안된다.
	      if(arr4[x][y]!=0) {
	    	  1--;
	    	  System.out.println("자리중복");
	    	  count++;
	      }else {
	    	 arr4[x][y]=temp[i];
	      }
	      
	      
	      
	      
	
	      for(i=0; i<arr4.length;i++ ) {
	    			for(j=0; j<arr4[i].length;j++){
	    				System.out.print(arr4[i][j]+" ");
	    			} 	System.out.println();
	    }
		
	      /* Up & Down 게임 
        0 ~ 99 사이의 임의의 수를 받아 (사용자로부터) 숨기고, 그수를 맞추는 게임. 
        임의의 수보다 낮게 입력하면 "Up" 출력, 
        높게 입력하면 "Down" 출력하면서 범위 좁혀가며 수를 맞춘다. 
        게임을 반복하기 위해 y/n묻고, n 입력시 프로그램 종료. 
        콘솔예시) 
        숫자가 정해졌습니다. 맞춰보세요! 
        0 ~ 99 
        1 >>  55   (사용자 입력) 
        "Up"
        55 ~ 99 
        2 >>  70
        "Up"
        70 ~ 99 
        3 >>  85
        "Down"
        70 ~ 85 
        4 >>  80
        "Down"
        70 ~ 80
        5 >>  75
        "Up"
        75 ~ 80
        6 >>  77
        맞았습니다. 
        다시 하시겠습니까?(y/n) >>  y  
        숫자가 정해졌습니다. 맞춰보세요! 
        0 ~ 99 
        1 >>  30    
        "Up"
        30 ~ 99 
        2 >>  45
        맞았습니다. 
        다시 하시겠습니까?(y/n) >>  n 
        게임 종료!!  
     */
			/*
		Scanner sc = new Scanner(System.in);
		System.out.println("문자 입력>>");
		String str = sc.nextLine();
		if(str.equals("a")) {  //if(str == "A") 문자열은 안된다 !!
			System.out.println("같아요");
		}
	*/	
	}
}

 

 

package day06;

public class Test55 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][]arr4 = new int [4][4];
		int[]temp = new int [10];
		int i,j=0;
		int count = 0;
			// 보드판 모두 0으로 초기화
			  for(i=0; i<arr4.length;i++ ) {
				  	for(j=0; j<arr4[i].length;j++){
					arr4[i][j] = 0;
					} 	
			}
				
		
		 // 10개 랜덤 생성
		      for(i=0; i<temp.length;i++ ) {
		    	 
		    		  temp[i] =((int)(Math.random()*10)+1);	
		      }
		      // 10개 랜덤을 보드에 넣기
		      for(i = 0; i<temp.length; i++) {
		      //보드의 임의의 위치
		    	  // 행 0~3렬 /렬 0~3렬
	    	
		    	  
		   
	      		int x =  (int)(Math.random()*4); //행 인덱스 랜덤
	      		int y =  (int)(Math.random()*4); //행 인덱스 랜덤
	      		 
		     
		      // 중복체크 : 같은 자리가 다시 뽑히면 안된다.
		      if(arr4[x][y]!=0) {
		    	  i--;
		    	  System.out.println("자리중복");
		    	  count++;
		    	 
		      		}else {
		    	 arr4[x][y]=temp[i];
		      }
		      
		    }  
		       System.out.println(count+"번 반복됨");
		      
		
		      for(i=0; i<arr4.length;i++ ) {
		    			for(j=0; j<arr4[i].length;j++){
		    				System.out.print(arr4[i][j]+" ");
		    	}		 	System.out.println();
		    }
	}
}

 

package day06;
	import java.util.Scanner;
public class Test5511 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub



				/* Up & Down 게임 
					0 ~ 99 사이의 임의의 수를 받아 (사용자로부터) 숨기고, 그수를 맞추는 게임. 
					임의의 수보다 낮게 입력하면 "Up" 출력, 
					높게 입력하면 "Down" 출력하면서 범위 좁혀가며 수를 맞춘다. 
					게임을 반복하기 위해 y/n묻고, n 입력시 프로그램 종료. 
					콘솔예시) 
					숫자가 정해졌습니다. 맞춰보세요! 
					
					0 ~ 99 
					1 >>  55   (사용자 입력) 
					"Up"
					
					55 ~ 99 
					2 >>  70
					"Up"
					
					70 ~ 99 
					3 >>  85
					"Down"
					
					70 ~ 85 
					4 >>  80
					"Down"
					
					70 ~ 80
					5 >>  75
					"Up"
					
					75 ~ 80
					6 >>  77
					맞았습니다.
					 
					다시 하시겠습니까?(y/n) >>  y  
					
					숫자가 정해졌습니다. 맞춰보세요! 
					0 ~ 99 
					1 >>  30    
					"Up"
					30 ~ 99 
					2 >>  45
					맞았습니다. 
					다시 하시겠습니까?(y/n) >>  n 
					게임 종료!!  
				*/
				Scanner sc = new Scanner(System.in);
				// 게임 전체를 돌리는 반복문 (한판~ 두판~ 세판~) 
				boolean play = true; // 게임을 다시 돌릴지 안돌릴지 정해줄 변수 
				
				while(play) {
					int num = (int)(Math.random() * 100); // 0~99 임의의 값 생성
					int count = 1;  	// 입력 회차 
					int guess = -1; 	// 사용자가 입력한 수 저장해둘 변수 
					int low = 0; 		// 낮은 범위값 들고 있을 변수 
					int high = 99; 		// 높은 범위값 들고 있을 변수 
					
					System.out.println("숫자가 정해졌습니다. 맞춰보세요!"); 			
					while(true) {
						// 입력한값과 랜덤값 num이 같을 경우 
						System.out.println(low + " ~ " + high);
						System.out.print(count + " >> ");
						guess = Integer.parseInt(sc.nextLine());
						//guess = sc.nextInt();
						count++; 
						
						
						if(guess == num) {
							System.out.println("맞았습니다.");
							System.out.println("다시 하시겠습니까?(y/n) >>");
							String answer = sc.nextLine();
							
							if(answer.equalsIgnoreCase("n")) {
								System.out.println("게임종료!");
								play = false; // 겉에 while문 반복을 판단하는 값 false 바꾸기 
								// 다음 크게 돌때 검사하러가면 false라서 종료된다!! 
								break; // 숫자 계속 입력받고 검사하는 안쪽 while문 빠져나가기
							}else if(answer.equalsIgnoreCase("y")) {
								break; // 숫자 계속 입력받고 검사하는 안쪽 while문 빠져나가기
							}else {
								System.out.println("잘못 입력하셨습니다.");
								continue;
							}
						}
									
						if(guess < num) {
							System.out.println("Up");
							low = guess;
						}
						if(guess > num) {
							System.out.println("Down");
							high = guess;
						}		
					}
				}
				sc.close();
			}
		}

 

 

package day06;

import java.util.Scanner;

public class Test5522 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		Scanner sc = new Scanner(System.in);
		boolean play = true;
		
		while(play) {
			int num = (int)(Math.random()*100); //0-99 숫자만들기
			int guess = -1;
			int count = 1;
			int low   = 0 ;
			int high  = 99 ;
			
			System.out.println("숫자가 정해졌습니다! 맞춰보세요!");
			
			while(true) {
			System.out.println(low+" ~~"+ high);
			System.out.println(count + ">>");
			count++;
			guess = sc.nextInt();
					if(guess==num){  
	 				System.out.println("맞췄습니다!");            
	 				System.out.println("다시 하겠습니까? y/n>>");    
	 				String answer = sc.nextLine();
	 				
			 			if(answer.equalsIgnoreCase("n")) {
		 					System.out.println("종료!");
			 				play = false;	
					 	 	break;
			 			}else if (answer.equalsIgnoreCase("y")) {
					 				break;
						}else {
					 			System.out.println("잘못 입력하셨습니다");
					 				continue;
						}		 			
					}
					if(guess>num) {
						System.out.println("Down");
						high = guess;
					}
					
					if(guess<num) {
						System.out.println("Up");
						low = guess;
					}
	
			}

		}
		sc.close();
	}
		
}

'P-Language > [Java]' 카테고리의 다른 글

[Java] 8 - 메서드  (0) 2022.06.03
[Java] 7 - 객체지향  (0) 2022.06.03
[Java] 5 - 배열  (0) 2022.06.03
[Java] 4 - 조건문(switch), 반복문  (0) 2022.06.03
[Java] 3 - 연산자, 제어문, 조건문  (0) 2022.06.03

+ Recent posts