[13] Java 연습문제 03 - 2차원 배열

kangsun·2022년 9월 18일
0

Java

목록 보기
14/44

1. 대, 소문자의 개수를 각각 구하시오.

		char[] ch= {'I', 't', 'W', 'i', 'l', 'l'};
		int size=ch.length;	//6
		// -> 대문자 : 2개
		// -> 소문자 : 4개


 		int upper=0;	//대문자의 개수
		int lower=0;	//소문자의 개수
		
		for(int i=0; i<size; i++) {
			if (ch[i]>='A' && ch[i]<='Z') { upper++;}
			if (ch[i]>='a' && ch[i]<='z') { lower++;}
		}//if end
		
		
		System.out.printf("대문자 개수 : %d\n", upper);
		System.out.printf("소문자 개수 : %d\n", lower);

💻 console
대문자 개수 : 2
소문자 개수 : 4


2. 대, 소문자를 서로 바꿔서 출력하시오.

		char[] ch= {'I', 't', 'W', 'i', 'l', 'l'};
		int size=ch.length;	//6
		// iTwILL
		
		for(int i=0; i<size; i++) {
			if (ch[i]>='A' && ch[i]<='Z') { 
				System.out.printf("%c", ch[i]+32);
			}//if end
			
			if (ch[i]>='a' && ch[i]<='z') {
				System.out.printf("%c", ch[i]-32);
			} //if end
		}//for end

💻 console
iTwILL


3. 모음의 개수를 구하시오. (A E I O U a e i o u)

		// -> 모음의 개수 : 2개
        
		char[] ch= {'I', 't', 'W', 'i', 'l', 'l'};
		int size=ch.length;	//6
		int mo=0;	//모음의 개수
        
		for(int i=0; i<size; i++) {
			char c=ch[i];
			if(c>='A' && c<='Z') {	//대문자인지?
				c=(char)(c+32);		//소문자로 변환
			}//if end
			
			switch(c) {
			case 'a':
			case 'e':
			case 'i':
			case 'o':
			case 'u': mo++;
			}// switch end
		}//for end
		
		System.out.printf("\n모음의 개수: %d\n", mo);

💻 console
모음의 개수: 2

[해설]

  • int mo=0;
    - 모음의 개수를 넣을 변수 설정
  • for(int i=0; i<size; i++)
    - 0부터 int size=ch.length; (6) 까지 반복문을 준다.
    - {'I', 't', 'W', 'i', 'l', 'l'}; 까지 반복한다.
  • char c=ch[i];
    - 그 문자를 문자형 c 변수에 넣는다
  • if(c>='A' && c<='Z')
    - c변수 안에 있는 문자들 안에 대문자가 있다면
  • c=(char)(c+32);
    - c를 소문자로 바꿔준다.
  • switch(c) {
    		case 'a':
    		case 'e':
    		case 'i':
    		case 'o':
    		case 'u': mo++;
    		}// switch end
    - switch~case문으로 모음이 나오면 mo변수에 1씩 추가해준다.

4. 각행의 모음의 개수를 구하시오.

		//str[0]행 : 2개
		//str[1]행 : 1개
		//str[2]행 : 2개
        
		char[][] str= {
				 		 {'Y', 'e', 'a', 'r'}
				 		,{'M', 'o', 'n', 't', 'h'}
				 		,{'D', 'a', 't', 'e'}
					  };
                      
                      
        int row=str.length;	//3
        int count=0;
        
        for(int r=0; r<row; r++) {
        	int col=str[r].length;		//4,5,4
            for(int c=0; c<col; c++) {
            	char w=str[r][c];		
                
                if(w>="A" && w<="Z") {
                	w=(char)(w+32);
                }//if end
                
                switch(w) {
                	case 'a' :
                    case 'e' :
                    case 'i' :
                    case 'o' :
                    case 'u' :	count++;
                }//switch end
            }//for end
            System.out.printf("\n str[%d]행 모음의 개수] : %d개", r, count);
			count=0;	//각 행마다 모음의 개수를 구하기 때문에 초기화 해야함
        }//for end
		

💻 console
str[0]행 모음의 개수 : 2개
str[1]행 모음의 개수 : 1개
str[2]행 모음의 개수 : 2개


[⚠️ 오답노트]
✔️ count=0; 1개 이상의 개수를 count 하려면 반드시 초기화를 시켜줘야한다.

4. 대각선 방향의 각 요소의 합을 구하시오.

		// 대각선 ↘ 방향의 합	4,9,7 = 20		num[0][0] + num[1][1] + num[2][2]
		// 대각선 ↙ 방향의 합	2,9,6 = 17		num[0][2] + num[1][1] + num[2][0]
        
		int[][] num= {
						 {4, 3, 2}
						,{5, 9, 1}
						,{6, 8, 7}
					 };
                      
                      
		int hap1=0;	// 대각선 ↘
		int hap2=0;	// 대각선 ↙
        
        for(int i=0; i<num.length; i++) {
        	hap1=hap1+num[i][i];
            hap2=hap2+num[i][num.length-1-i];
        }//for end
        
        
        
// ---------------------------------------------------------------------------------


		
        //[분석하기..]
                      
        int[][] num= {
						 {[0][0], [0][1], [0][2]}
                         
						,{[1][0], [1][1], [1][2]}
                        
						,{[2][0], [2][1], [2][2]}
					 };
                     
                     
                     
   		대각선 ↘   num[0][0] + num[1][1] + num[2][2]	//=> [i][i]가 똑같이 증가하고
		대각선 ↙	 num[0][2] + num[1][1] + num[2][0]	//=> [i][num.length-1-i] 
        											//   열이 2에서부터 0으로 감소하고 있다.
        											//   0부터 시작하기때문에 -i를 주면 순차적으로 감소한다.
                     
                     
                                            
      	num.length;	//3
        
        for(int i=0; i<num.length; i++)

            	i=0;0<3;			
       			→ hap1=hap1+num[0][0];
       			→ hap2=hap2+num[0][3-1-0];0++ → i=1
       						  	  [2]
       
       			i=1;1<3;		
       			→ hap1=hap1+num[1][1];
       			→ hap2=hap2+num[1][3-1-1];1++ → i=2
       							  [1]
       
       			i=2;2<3;		
       			→ hap1=hap1+num[2][2];
       			→ hap2=hap2+num[2][3-1-2];2++ → i=3
       							  [0]
       
       			i=3;3<3;3<3 조건이 false 이므로 for문 종료!
		

💻 console
대각선 ↘ 방향의 합 : 20
대각선 ↙ 방향의 합 : 17


[⚠️ 오답노트]
✔️ 배열 안에 담겨있는 숫자가 중요한 것이 아니고, 배열의 인덱스에서 규칙을 생각해보자.
profile
코딩 공부 💻

0개의 댓글