- 자바의 정석 연습문제 ch5 배열2023년 08월 31일 07시 33분 43초에 업로드 된 글입니다.작성자: 민발자728x90
자바의 정석 3판 기초판 연습문제
https://github.com/castello/javajungsuk3
[5-1] 다음은 배열을 선언하거나 초기화 한 것이다. 잘못된 것을 고르고 그 이유를 설명 하시오.
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};e. int arr[5];
f. int[] arr[] = new int[3][];
d → {}안에 있는 데이터만큼 배열 길이 설정 배열 길이 지정 불가
e → 선언과 동시에 배열 길이 지정 불가
[5-2] 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가?
int[][] arr = { { 5,5,5,5,5}, { 10, 10, 10}, { 20, 20, 20, 20}, { 30, 30} };
arr[3]. length 값 : 2 → {30, 30}
[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.
int[] arr = {10, 20, 30, 40, 50}; int sum = 0; System.out.println("sum="+sum); //실행 결과 sum = 150
for(int i = 0; i < arr.length; i++) { sum += arr[i]; }
[5-4] 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.
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; System.out.println("total="+total); System.out.println("average="+average); // 실행결과 total = 325 average = 16.25
for(int i = 0; i<arr.length; i++) { for(int j = 0; j <arr[i].length; j++) { total += arr[i][j]; } } average = (float)total / (arr.length*arr[0].length);
[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; // (1) } // 배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다. // (2) for(int i=0;i<ball3.length;i++) { System.out.print(ball3[i]); } System.out.println();
(1) tmp = ballArr[i]; // tmp에 임시저장 ballArr[i] = ballArr[j]; // i에 j값 ballArr[j] = ballArr[i]; // j에 tmp (2) System.arraycopy(ballArr, 0, ball3, 0, 3); // arraycopy(복사항 배열, 복사할 배열 시작 위치, 복사본 담을 배열, 담을 배열 시작, 끝)
[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변 수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하 라. 단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
// 큰 금액의 동전을 우선적으로 거슬러 줘야한다. int[] coinUnit = {500, 100, 50, 10}; int money = 2680; System.out.println("money="+money); for(int i=0;i<coinUnit.length;i++) { (1) }
System.out.println(coinUnit[i] + ": " + money/coinUnit[i]); // 개수 출력 money = money % coinUnit[i]; // 나머지
[5-7] 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, ‘거스름 돈이 부족합니다.’라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불 한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣 어서 프로그램을 완성하시오.
if(args.length != 1) { System.out.println("USAGE: java Exercise5_7 3120"); System.exit(0); } // 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다. int money = Integer.parseInt(args[0]); 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; //(1) System.out.println(coinUnit[i]+"원: "+coinNum); } if(money > 0) { System.out.println("거스름돈이 부족합니다."); System.exit(0); // 프로그램을 종료한다. } System.out.println("=남은 동전의 개수 ="); for(int i=0;i<coinUnit.length;i++) { System.out.println(coinUnit[i]+"원:"+coin[i]); }
coinNum = money/coinUnit[i]; // 단위별 동전 개수 if(coin[i] >= coinNum) { coin[i] -= coinNum; // 개수만큼 개수 뺌 } else { coinNum = coin[i]; // 가지고 있는 개수보다 넘어가면 0으로 변 coin[i] = 0; } money -= coinUnit[i]*coinNum; //단위별 동전만큼 돈에서 뺌
[5-8] 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 ‘*’ 을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.
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++) { //(1) } for(int i=0; i < counter.length;i++) { //(2) System.out.println(); }
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]++; // answer[i]에 맞는 counter 1 증가 -> index에 맞춰 -1 } for(int i=0; i < counter.length;i++) { System.out.print(counter[i]); for(int j=1; j <= counter[i]; j++) { System.out.print("*"); } System.out.println(); }
[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++) { //(1) } } 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(); } //실행결과 /* ** ** ***** ***** **** **** ** ** ** */
// s[0][0] -> r[0][3] int a = j; int b = star.length-1-i; result[a][b] = star[i][j];
[5-11] 주어진 2차원 배열의 데이터보다 가로와 세로로 1이 더 큰 배열을 생성해서 배열 의 행과 열의 마지막 요소에 각 열과 행의 총합을 저장하고 출력하는 프로그램이다. (1) 에 알맞은 코드를 넣어서 완성하시오.
int[][] score = { {100, 100, 100} ,{20, 20, 20} ,{30, 30, 30} ,{40, 40, 40} ,{50, 50, 50} }; int[][] result = new int[score.length+1][score[0].length+1]; for(int i = 0; i < score.length; i++) { for(int j = 0; j < score[i].length; j++) { // (1) } } for(int i = 0; i < result.length; i++) { for(int j = 0; j < result[i].length; j++) { System.out.printf("%4d", result[i][j]); } System.out.println(); }
// result에 score 넣어주기 result[i][j] = score[i][j]; // 마지막줄 합계 result[result.length-1][j] += score[i][j]; // 왼쪽 합계 result[i][result[0].length-1] += score[i][j]; // 왼쪽 전체 합계 result[result.length-1][result[0].length-1] += score[i][j];
[5-13] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.
String[] words = { "television", "computer", "mouse", "phone"}; Scanner sc = new Scanner(System.in); for(int i = 0; i < words.length; i++) { char[] question = words[i].toCharArray(); // string을 char로 변환 //(1) System.out.printf("Q%d. %s의 정답을 입력하세요.>", i+1, new String(question)); String answer = sc.nextLine(); // trim으로 answer의 좌우 공백 제거 후 equals로 words[i]와 비교 if(words[i].equals(answer.trim())) System.out.printf("맞았습니다.%n%n"); else System.out.printf("틀렸습니다.%n%n"); }
for(int j = 0; j < question.length; j++) { // 랜덤 숫자 int num = (int)(Math.random() * question.length); // 임시저장 char tmp = question[i]; // 서로 변경 question[i] = question[num]; question[num] = tmp; }
728x90'정리 > Java' 카테고리의 다른 글
자바의 정석 연습문제 ch 7 객체지향 프로그래밍(2) (0) 2023.08.31 자바의 정석 연습문제 ch 6 객체지향 프로그래밍(1) (1) 2023.08.31 자바의 정석 연습 문제 ch4 조건문과 반복문 (1) 2023.08.15 자바의 정석 ch10 날짜와 시간 & 형식화 (0) 2023.08.13 자바의 정석 109~113강 ch9 java.lang 패키지와 유용한 클래스(2) (0) 2023.08.13 다음글이 없습니다.이전글이 없습니다.댓글