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
d : 두 번째 대괄호 안에 배열의 크기를 지정할 수 없습니다. 이미 괄호 안의 데이터 개수에 따라 방 개수가 정해졌기 때문입니다.
e : 배열을 선언할 때는 배열의 크기를 지정할 수 없습니다.
5-2) 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가?
int[][] arr = {
{5, 5, 5, 5, 5},
{10, 10, 10},
{20, 20, 20, 20},
{30, 30}
};
풀이) 2
4행의 길이는 2입니다.
5-3) 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.
package java1214;
public class ex05_03 {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
int sum = 0;
/*
* 알맞은 코드를 넣어 완성하시오 (1)
*/
System.out.println("sum="+sum);
}
}
// 출력
// sum=150
(1)
for(int i=0; i<arr.length; i++) {
sum += arr[i];
}
5-4) 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.
class Exercise5_4 {
public static void main(String[] args) {
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;
/*
* 알맞은 코드를 넣어 완성하시오 (1) .
*/
System.out.println("total=" + total);
System.out.println("average=" + average);
} // end of main
} // end of class
// 출력 :
// total=325
// average=16.25
// (1)
int cnt = 0;
for(int i=0; i < arr.length; i++) {
for(int j=0; j < arr[i].length; j++) {
total += arr[i][j];
cnt++;
}
}
average = (float)total/cnt;
5-5) 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오. ([참고] Math.random()을 사용했기 때문에 실행결과와 다를 수 있다.)
class Exercise5_5 {
public static void main(String[] args) {
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]);
}
} // end of main
} // end of class
// 출력
// 465
(1)
tmp = ballArr[j];
ballArr[j] = ballArr[i];
ballArr[i] = tmp;
(2)
System.arraycopy(ballArr, 0, ball3, 0, 3);
5-6) 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라. 단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오. (Hint. 나눗셈 연산자와 나머지 연산자를 사용해야 한다.)
class Exercise5_6 {
public static void main(String args[]) {
// 큰 금액의 동전을 우선적으로 거슬러 줘야한다.
int[] coinUnit = { 500, 100, 50, 10 };
int money = 2680;
System.out.println("money=" + money);
for (int i = 0; i < coinUnit.length; i++) {
/* 알맞은 코드를 넣어 완성하시오 (1) . */
}
}
}
// 출력 :
// money= 2680
// 500원 : 5
// 100원 : 1
// 50원: 1
// 10원: 3
(1)
count = money / coinUnit[i];
System.out.println(coinUnit[i] + "원 : " + count + " ");
money %= coinUnit[i];
5-7) 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, '거스름돈이 부족합니다.'라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
class Exercise5_7 {
public static void main(String args[]) {
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)아래의 로직에 맞게 코드를 작성하시오.
* 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다.
* 2. 배열 coin에서 coinNum만큼의 동전을 뺀다.
* (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.)
* 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
*/
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]);
}
} // main
}
출력)
money=3170 원
500원 : 5
100원 : 5
50원 : 3
10원 : 2
=남은 동전의 개수 =
500원 :0
100원 :0
50원 :2
10원 :3
money=3510
500원 : 5
100원 : 5
50원 : 5
10원 : 5
거스름돈이 부족합니다.
// (1)
coinNum = money / coinUnit[i];
if(coinNum >= coin[i]) {
coinNum = coin[i];
}
coin[i] -= coinNum;
money -= coinNum * coinUnit[i];
5-8) 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 '*'을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.
class Exercise5_8 {
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++) {
/* (1) 알맞은 코드를 넣어 완성하시오. */
}
for (int i = 0; i < counter.length; i++) {
/* (2) 알맞은 코드를 넣어 완성하시오. */
System.out.println();
}
}
}
// 출력 :
// 3***
// 2**
// 2**
// 4****
// (1)
for(int j = 0; j < counter.length; j++) {
if(answer[i] == j+1) {
counter[j]++;
}
}
// (2)
System.out.print(counter[i]);
for(int j=0; j < counter[i]; j++) {
System.out.print("*");
}
5-9) 주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성하시오.
class Exercise5_9 {
public static void main(String[] args) {
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();
}
}
}
// 출력 :
// **
// **
// *****
// *****
// ****
// ****
// **
// **
// **
(1) result[j][star.length-i-1] = star[i][j];
5-10) 다음은 알파벳과 숫자를 아래에 주어진 암호표로 암호화하는 프로그램이다. (1)에 알맞은 코드를 넣어서 완성하시오.
class Exercise5_10 {
public static void main(String[] args) {
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) 알맞은 코드를 넣어 완성하시오 . */
}
System.out.println("src:" + src);
System.out.println("result:" + result);
} // end of main
} // end of class
// 출력 :
// src:abc123
// result:`~!wer
(1)
if(src.charAt(i) >= 'a' && src.charAt(i) <= 'z') {
result += abcCode[src.charAt(i) - 97];
} else if(src.charAt(i) >= '0' && src.charAt(i) <= '9'){
result += numCode[src.charAt(i) - 48];
}
5-11) 주어진 2차원 배열의 데이터보다 가로와 세로로 1이 더 큰 배열을 생성해서 배열의 행과 열의 마지막 요소에 각 열과 행의 총합을 저장하고 출력하는 프로그램이다. (1)에 알맞은 코드를 넣어서 완성하시오.
class Exercise5_11 {
public static void main(String[] args) {
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();
}
} // main }
}
// 출력 :
// 100 100 100 300
// 20 20 20 60
// 30 30 30 90
// 40 40 40 120
// 50 50 50 150
// 240 240 240 720
// (1)
// for(int j=0; j < score[i].length; j++) {
result[i][j] = score[i][j];
result[i][score[i].length] += result[i][j];
result[score.length][j] += result[i][j];
}
result[score.length][score[i].length] += result[i][score[i].length];
5-12) 5-13을 변경해 아래와 같은 결과가 나오도록 하시오.
출력)
Q1. chair의 뜻은? dmlwk
틀렸습니다 정답은 의자입니다 .
Q2. computer의 뜻은? 컴퓨터
정답입니다.
Q3. integer의 뜻은? 정수
정답입니다.
전체 3문제 중 2문제 맞추셨습니다.
import java.util.Scanner;
public class ex05_12 {
public static void main(String[] args) {
String[] words = {"chair", "computer", "integer"};
Scanner scan = new Scanner(System.in);
int cnt =0;
// String str = "hi";
// String str2 = new String("hi");
for(int i=0; i<words.length; i++) {
String str[] = {"의자", "컴퓨터", "정수"};
System.out.print(words[i] + "의 뜻은?");
String str1 = scan.next();
if(str[i].equals(str1)) {
System.out.println("정답입니다.");
cnt++;
} else {
System.out.print("틀렸습니다. 정답은 " + str[i] + "입니다");
}
System.out.println();
}
System.out.println("전체 " + words.length + "문제 중 " + cnt + "문제 맞추셨습니다.");
}
}
5-13) 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.
import java.util.Scanner;
class Exercise5_13 {
public static void main(String args[]) {
String[] words = { "television", "computer", "mouse", "phone" };
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < words.length; i++) {
char[] question = words[i].toCharArray(); // String을 char[]로 변환
/*
* (1) 알맞은 코드를 넣어 완성하시오 . char배열 question에 담긴 문자의 위치를 임의로 바꾼다.
*/
System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(
question));
String answer = scanner.nextLine();
// trim()으로 answer의 좌우 공백을 제거한 후 , equals로 word[i]와 비교
if (words[i].equals(answer.trim()))
System.out.printf("맞았습니다.%n%n");
else
System.out.printf("틀렸습니다.%n%n");
}
} // main의 끝
}
// 출력 :
// Q1. lvtsieeoin의 정답을 입력하세요.>television
// 맞았습니다.
// Q2. otepcumr의 정답을 입력하세요.>computer
// 맞았습니다.
// Q3. usemo 의 정답을 입력하세요.>asdf
// 틀렸습니다.
// Q4. ohpne 의 정답을 입력하세요.>phone
// 맞았습니다.
// (1)
for(int j=0; j<question.length;j++) {
int rand = (int)(Math.random()*question.length);
char temp;
temp = question[j];
question[j] = question[rand];
question[rand] = temp;
}
제 나름 열심히 풀어보았어요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Java' 카테고리의 다른 글
[java] 이것이 자바다 ch2 변수와 타입 (0) | 2023.01.05 |
---|---|
[java] 자바의 정석 ch6 연습문제 풀이 (0) | 2022.12.20 |
[java] 자바의 정석 ch4 연습문제 풀이 (0) | 2022.12.19 |
[java] 자바의 정석 ch3 연습문제 풀이 (0) | 2022.12.18 |
[java] 자바의 정석 ch2 연습문제 풀이 (0) | 2022.12.18 |