basicJAVA/100. 연습문제

Exam 04

unemo 2020. 10. 20. 21:47
반응형

[5-1] 다음은 배열을 선언하거나 초기화 한 것이다. 잘못된 것을 고르고 그 이유를 설명하시오

 

1) int[] arr[];
이차원 배열은 타입과 변수명이 대괄호를 나눠가지게 가능하다.
2) int[] arr = {1,2,3}; 
new 연산자 생략하고 선언생성 가능
3) int[] arr = new int[5];
일차원 배열 선언 및 초기화
4) int[] arr = new int[5]{1,2,3,4,5};
배열생성시 대괄호 안에 크기를 적음과 동시에 중괄호에 배열값들을 선언할 수없다.
5) int arr[5];
선언부분에 []안에 배열수를 넣는게 틀렸다.  
6) int[] arr[] = new int[3][];
열이 정해지지않은 이차원배열의 선언

 

 

[5-2] 다음과 같은 배열이 있을 때

int[][] arr= {
					{5,5,5,5,5},
					{10,10,10},
					{20,20,20,20},
					{30,30}
		}

 

(1) arr[3] :30
(2) arr.length : 4
(3) System.out.println(arr[4,1]); : error

 

 

[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램 완성하시오.

int[] arr = {10,20,30,40,50};
		int sum = 0;
		
		for(int i = 0; i<arr.length;i++){
			sum+=arr[i];
		}
		
		
		System.out.println("Sum="+sum);

 

[5-4] 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.

int[][] arr= {
				 {5,8,13,5,2},
				 {22,13,28},
				 {2,18,23,62}};
		 int total = 0;
		 float average = 0;
		 int count = 0;
		 for(int i = 0; i<arr.length; i++){
			 for(int j = 0; j<arr[i].length; j++){
				 count++;
				 total +=arr[i][j];
			 }
		 }
		 average = (int)((float)total/count*100+0.5)/100F;
		 
		 System.out.println("total ="+ total);
		 System.out.println("Average ="+average);

 

[5-5] 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 

변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라.
단, 가능한 한 적은 수의 동전으로 거슬러 주어야 한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오

 

int[] coinUnit = {500,100,50,10};
		int money = 2790;
		
int[] co = new int[coinUnit.length];

for(int i = 0; i<coinUnit.length;i++){
	co[i] = money/coinUnit[i]; //2790 500으로 나눠서 5라는 몫이  count[0]에 들어감
	money = money%coinUnit[i];	//돈을 500으로 나눈것의 나머지만 머니라고 한다.
	System.out.println(coinUnit[i]+"원 :" + co[i]+"개");
			}

 

[5-6] 다음은 1과 9 사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다.

 

int[] ballArr = {1,2,3,4,5,6,7,8,9};
		int[] ball3 = new int[3];
		
		for(int i = 0; i <ballArr.length;i++){
			int q = (int) (Math.random()*ballArr.length);		//9미만 즉 index 0~8사이
			int temp = ballArr[i];
			ballArr[i]= ballArr[q];
			ballArr[q]= temp;
		}
		System.out.println("랜덤:");
		for(int i = 0 ; i<ballArr.length; i++){
			System.out.print(  ballArr[i]);
		}
		System.out.println();
		for(int i = 0; i <ball3.length; i++){
			ball3[i]=ballArr[i];
		}
		
		for(int i =0; i<ball3.length;i++){
			System.out.println(ball3[i]);
		}

 

[5-7] 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 

       개수만큼 '*'를 찍어서 그래프를 그리는 프로그램이다.

int[] answer = {1,4,3,2,1,2,3,2,1,4};
		int[] counter = new int[4];
		for(int i = 0; i<answer.length;i++){
			switch(answer[i]){
			case 1: counter[0]++;
					break;
			
			case 2: counter[1]++;
					break;
		
			case 3: counter[2]++; 
					break;
	
			case 4: counter[3]++;
			break;
			}		
		}
		
		for(int i = 0; i<counter.length;i++){
			System.out.print(i+1 +":"+ counter[i] + "개");
			for(int k = 0; k<counter[i];k++){System.out.print("*");}
			System.out.println();
		}

이렇게 풀었는데, switch문 대신 for문으로 줄이면,

	int[] answer = {4,1,3,2,1,2,3,2,1,4};
		int[] counter = new int[4];
		
		for(int i = 0; i<answer.length;i++){
			if(answer[i]>0){
			counter[answer[i]-1]++;
			}
		}
		
		for(int i = 0; i<counter.length;i++){
			System.out.print(i+1 +":"+ counter[i] + "개");
			for(int k = 0; k<counter[i];k++){System.out.print("*");}
			System.out.println();
		}

 

//hidden answer값의 범위를 측정하여 최대 5개의 통계만들기

~몰러~

 

[5-8] 문제 5-5에 동전의 개수를 추가한 프로그램이다.

커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다.

보유한 동전의 개수로 거스름돈을 지불할 수 없으면, '거스름돈이 부족합니다'라고 출력하고 종료한다.

지불할 돈이 충분히 있으면, 거스름돈을 지불한 만큼 가진 돈에서 빼고 남은 동전의 개수르 화면에 출력한다.

(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

 

int money = 8740;
		System.out.println("money =" + money);
		int[] coinUnit = {500,100,50,10};
		int[] coin = {5,5,5,5};
		
		for(int i = 0; i<coinUnit.length;i++){
			int coinNum = 0;
			coinNum = money/coinUnit[i];				//
			if(coin[i]>=coinNum){			//예산안일떄
				coin[i]=coin[i]-coinNum;	//지갑안 동전갯수는 지갑안동전갯수에서 거스름돈줘야할만큼빼기
				money = money-coinNum*coinUnit[i];//총액은 총액-거슬러줄금액*거슬러줄갯수
				
				}else{						//예산밖일때
											//일단 지갑안의 코인갯수는 -가 되지않게 0개로 해주고
					money = money-coinUnit[i]*coin[i];	//총액은 총액-coinUnit*coin[5]
					coin[i]=0;
				}
			
			System.out.println(coinUnit[i]+"원:" + coinNum); // 몇개드는지
			
		}
		if(money > 0){
			///
			System.out.println("=남은 동전의 갯수 =");
			for(int j =0; j<coinUnit.length;j++){
				System.out.println(coinUnit[j]+"원"+coin[j]+"개 남음");
			}
			//
			System.out.println("거스름돈이 부족합니다.");
			System.exit(0);
		}
		System.out.println("=남은 동전의 갯수 =");
		for(int i =0; i<coinUnit.length;i++){
			System.out.println(coinUnit[i]+"원"+coin[i]+"개 남음");
		}

 

 

[5-9] 주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성 하시오.

char[][] star = {
				{'*','*',' ',' ',' '},
				{'*','*',' ',' ',' '},
				{'*','*','*','*','*'},
				{'*','*','*','*','*'}
		};
		char[][] result = new char[star[0].length][star.length];//행과 열을 바꿨다
		
		for(int i = 0; i<star.length;i++){
			for(int j = 0 ; j<star[i].length;j++){
				System.out.print(star[i][j]);
			}
			System.out.println();
		}
		System.out.println("=========");//이게 원래 별
		
		
		for(int i =0; i<star.length;i++){
			for(int j = 0; j<star[i].length;j++){
				//////////
				
				//result[j][i]= star[i][j];
				//////////
				
				result[j][star.length-1-i]=star[i][j];
			}
		}
		
		for(int i =0; i<result.length;i++){
			for(int j =0; j<result[i].length;j++){
				System.out.print(result[i][j]);
			
		}
	}

왜 star.length에서 1을 뺴는지는 모르겠음...  3은알겠음

반응형

'basicJAVA > 100. 연습문제' 카테고리의 다른 글

Exam_03 추가과제  (0) 2020.10.16
Exam_03  (0) 2020.10.16
Exam 01  (0) 2020.10.12
Exam 02  (0) 2020.10.12