Programming/Java의 정석

[Java의 정석 3판] chapter5 배열 연습 문제 (220116 기준 재확인 필요)

yndev 2022. 1. 16. 00:29

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

답 : d, e

a. int[] arr[];
b. int[] arr = {1, 2, 3,};
c. int[] arr = new int[5];
d. int[] arr = new int[5]{1, 2, 3, 4, 5};
=> new int{1, 2, 3, 4, 5};
e. int arr[5];
=> int arr[];
f. int[] arr[] = new int[3][];

 

5-2. 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가?

답 : 2

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

 

5-3. 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오. (결과값 sum=150)

				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에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오. (값 : total=325, average=16.25)

		int[][] arr = {
				{ 5, 5, 5, 5, 5},
				{10,10,10,10,10},
				{20,20,20,20,20},
				{30,30,30,30,30}
				};
				int total = 0;
				float average = 0;
				
				for(int i = 0; i < arr.length; i++) {
					for(int j = 0; j < arr[i].length; j++) {
						total += arr[i][j];
					}
					
				}
                		average = total / (float)(arr.length * arr[0].length);
                        
				System.out.println("total="+total);
				System.out.println("average="+average);

average값을 구하는 건 for문 바깥에다 써도, 안쪽에 써도 출력하는데 문제가 없다.

 

5-5. 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

		int[] ballArr = {1,2,3,4,5,6,7,8,9};
		int[] ball3 = new int[3];
		// 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다.
		for(int i=0; i< ballArr.length;i++) {
		int j = (int)(Math.random() * ballArr.length);
		int tmp = 0;
		tmp = ballArr[i];
		ballArr[i] = ballArr[j];
		ballArr[j] = tmp;
		}
		System.arraycopy(ballArr, 0, ball3, 0, 3);
		for(int i=0;i<ball3.length;i++) {
		System.out.print(ball3[i]);
		
		}

System.arraycopy()를 써본 적이 없어서 헤맸다. (복사할 배열, 시작인덱스, 복사되는 배열, 시작인덱스, 길이)

 

5-6. 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라. 

단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다. (1)에 알맞은 코드를 넣어서프로그램을 완성하시오.
[Hint] 나눗셈 연산자와 나머지 연산자를 사용해야 한다.

		int[] coinUnit = {500, 100, 50, 10};
		int money = 2680;
		System.out.println("money="+money);
		for(int i=0;i<coinUnit.length;i++) {
		
		System.out.println(coinUnit[i] + "원 : " + money/coinUnit[i]);
		System.out.println(money = money % coinUnit[i]);
		}
		System.out.println(money);

중간 나머지 연산자 넣어준게 이해가 안 가서 중간중간 출력문을 넣어보니 이해완료.. 왜 머리론 답이 안나올까

 

5-7. 풀 수 있을때 다시..

 

5-8. 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 ‘*’을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.

	public static void main(String[] args) {

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

8번 이해도 안가고 이 이상부터 도저히 ...........일단 계속 해보자

 

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++) {
			
			int x = j;
			int y = star.length-1-i;
			
			result[x][y] = 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]);
		}
		System.out.println();
	
		}

arraycopy를 써야되나 고민고민하다가 답지 보고도 이해 안가서 아이패드에 별 난리쳐가면서 겨우이해함

이렇게 어렵게 풀어야하는건가요^^

 

5-10. 다음은 알파벳과 숫자를 아래에 주어진 암호표로 암호화하는 프로그램이다. (1)에 알맞은 코드를 넣어서 완성하시오.

	char[] abcCode =
		{ '`','~','!','@','#','$','%','^','&','*',
			'(',')','-','_','+','=','|','[',']','{',
			'}',';',':',',','.','/'};
					// 0   1   2   3   4   5   6   7   8   9
	char[] numCode = {'q','w','e','r','t','y','u','i','o','p'};
		
	String src = "abc123";
	String result = "";
	
	// 문자열 src의 문자를 charAt()으로 하나씩 읽어서 변환 후 result에 저장
	for(int i=0; i < src.length();i++) {
		char ch = src.charAt(i);
		/*
		(1) 알맞은 코드를 넣어 완성하시오.*/ 
		if('a' <= ch && ch <= 'z') {
			result += abcCode[ch - 'a'];
		} else if('0' <= ch && ch <= '9') {
			result += numCode[ch - '0'];
		}
	}
	
	System.out.println("src:"+src);
	System.out.println("result:"+result);

답안보고 이해했다.. 다시푼다면 풀 수 있겠지..

 

5-11. 봐도 모르겠다. 다음 기회에.....