[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 : new int[ ]의 [ ] 안에 배열의 갯수를 지정할 수 없다.
e : [ ]안에 갯수를 넣을 수 없다.
*f. int[] arr[] = new int[3][]; //이건 가능한데, int[] arr[] = new int[][3]; 는 불가능
[5-2] 다음과 같은 배열이 있을 때 arr[3].length의 값은 얼마인가 ,
int[][] arr = {
{ 5, 5, 5, 5, 5},
{ 10, 10, 10},
{ 20, 20, 20, 20},
{ 30, 30}
}
답)
2
[5-3] 배열에 담긴 모든 값을 더하는 프로그램을 완성하시오. (실행결과 : 150)
class Exercise5_3
{
public static void main(String[] args)
{
int[] arr = {10, 20, 30, 40, 50};
int sum = 0;
/*
(1) . 알맞은 코드를 넣어 완성하시오
*/
System.out.println("sum="+sum);
}
}
답)
for(int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
[5-4] 2차원 배열에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오
(실행 결과 :
total=325
average=16.25)
package arrayex;
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
답)
int total_length = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
total += arr[i][j];
total_length++;
}
}
average = (float)(total/total_length);
[5-5] 다음은 과 사이의 중복되지 않은 숫자로 이루어진 자리 숫자를 만들어내는 프로그램이다 (1)~(2) 에 알맞은 코드를 넣어서 프로그램을 완성하시오 .
package arrayex;
class Exercise5_4 {
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
답)
package arrayex;
class Exercise5_4 {
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;
tmp = ballArr[i];
ballArr[i] = ballArr[j];
ballArr[j] = tmp;
}
// 배열 ballArr 의 앞에서 3 개의 수를 배열 ball3로 복사한다
System.arraycopy(ballArr, 0, ball3, 0, 3);
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]);
}
} // end of main
} // end of class
[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라 (단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다.)
(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
package arrayex;
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) . 알맞은 코드를 넣어 완성하시오
*/
}
} // main
}
>> 실행결과
money=2680
500 : 5 원
100 : 1 원
50 : 1 원
10 : 3
답)
for(int i=0;i<coinUnit.length;i++) {
if(money >= coinUnit[i]) {
System.out.printf("%d원:%d%n",coinUnit[i],money/coinUnit[i]);
money = 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
}
>> 실행결과
C:\jdk1.8\work\ch5>java Exercise5_7
USAGE: java Exercise5_7 3120
C:\jdk1.8\work\ch5>java Exercise5_7 3170
money=3170
500 : 5 원
100 : 5 원
50 : 3 원
10 : 2 원
= = 남은 동전의 개수
500 :0 원
100 :0 원
50 :2 원
10 :3 원
C:\jdk1.8\work\ch5>java Exercise5_7 3510
money=3510
500 : 5 원
100 : 5 원
50 : 5 원
10 : 5 원
거스름돈이 부족합니다.
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;
coinNum = money % coinUnit[i];
coin[i] -= coinNum;
money -= coinUnit[i]*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
}
[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****
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++) {
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();
}
}
}
[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();
}
}
}
>> 실행결과
**
**
*****
*****
****
****
**
**
**
package arrayex;
public 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++) {
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]);
}
System.out.println();
}
}
}
[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
package arrayex;
public 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 = "";
StringBuffer buffer = new StringBuffer(src.length());
// 문자열 src의 문자를 charAt()으로 하나씩 읽어서 변환 후 result에 저장
for (int i = 0; i < src.length(); i++) {
char ch = src.charAt(i);
if(ch >= '0' && ch <='9') {
buffer.append(numCode[ch-'0']);
}else {
buffer.append(abcCode[ch-'a']);
}
}
result = buffer.toString();
System.out.println("src:" + src);
System.out.println("result:" + result);
}
}
[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
package arrayex;
public 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++) {
result[i][j] = score[i][j];
result[i][score[i].length]+=result[i][j];
result[score.length][j] += result[i][j];
result[score.length][result[0].length-1] += result[i][j];
}
}
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();
}
}
}
[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
맞았습니다.
package arrayex;
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[]로 변환
for(int j = 0; j < question.length; j++) {
char tmp = ' ';
int ran = (int)(Math.random()*question.length);
tmp = question[j];
question[j] = question[ran];
question[ran] = tmp;
}
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의 끝
}
[참조]
- [자바의 정석], 남궁석 지음
- 블로그 https://codechobo.tistory.com/1
'Language > Java' 카테고리의 다른 글
[자바의 정석_예제] 연산자 (0) | 2022.03.21 |
---|---|
[자바의 정석_예제] 변수 (0) | 2022.03.21 |
[자바_문법] 배열 (0) | 2022.03.20 |
[자바_문법] 향상된 for문 (JDK 5.0이상, 배열 및 컬렉션/맵에 사용) (0) | 2022.03.19 |
[자바_복습] JVM 메모리 구조 정리 (0) | 2022.03.19 |