▶문제 1
다음은 배열을 선언하거나 초기화한 것이다.
잘못된 것을 고르고 그 이유를 설명하시오.
1
2
3
4
5
6
7
8
9
10
11
|
public class Method{
public static void main(String[] args) {
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][];
}
|
cs |
[풀이]
a. int [] arr = new int [3]; 이 1차배열의 선언 형식이나 a처럼 쓰는 것도 가능하다.
b. 배열 변수를 초기화 하는 방법은 크게 3가지로 나누어진다.
1) 가장 일반적인 방법으로 참조변수의 기본값은 null이지만, 배열을 가리키는 참조 변수는 null대신
0인 배열로 초기화하기도한다.
2) 괄호 {} 안에 아무것도 넣지 않으면, 길이가 0인 배열이 생성된다.
3) new int []가 생략이 되기도 한다.
=> b는 3번 방법을 써서 배열을 초기화 시켰으며 마지막 , 은 없는게 좋지만 있다고 해서
오류가 나지는 않는다.
c. 1차배열 선언형식 정답
d. 뒤에 {}로서 값이 대입이 되어있다면 2번째 []안에서 배열의 길이를 정할 순 없고 데이터갯수에 따라 자동으로 정해진다.
e. 배열을 선언할 때는 배열의 크기를 지정할 수 없다.
f. 가능한 식으로 행은 3칸, 열은 0칸인 배열이 생성된다.
▶문제2
다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가?
int[][] arr = { { 5, 5, 5, 5, 5}, {10, 10, 10}, {20, 20, 20, 20}, {30, 30} };
1
2
3
4
5
6
7
8
9
10
|
public static void main(String[] args) {
int [][] arr = {
{5, 5, 5, 5, 5},
{10,10,10},
{20,20,20,20},
{30,30} //답 2
};
}
|
cs |
[풀이]
문제 1의 풀이 b에 나와있는 2차배열 초기화 방법 3으로서 new int [][] 를 생략하고 값을 넣었다.
주의점은 마지막 괄호 {} 뒤에는 콤마,를 찍지 않으며 ;는 배열이 모두 끝난 } 뒤에 위치시킨다.
▶문제 3
배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
}
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
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); // 150
}
|
cs |
▶문제 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}
};
1
2 3
4
5
6
7
8
9
10
11
12
|
public class Array {
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}
};
}// sum = 325,avg = 16.25
}
|
cs |
[답]
[풀이]
1) 총 합읕 열과 행을 구분지어 반복문을 실행시키기위해 2중 for문을 사용하였다. 여기의 포인트는 "j<arr[i].length"인데, 첫번째 for는 행을 담당하기에 arr.length는 큰 문제가 없지만, 열을 나타내려면 arr[i],length로 arr안의 어떤 행인지를 선택해주고 그 행의 길이를 구할 수 있게 해야지만 행과 열의 총 합이 출력된다.
2) 2차배열이니까 배열이름을 작성하고 행과 열을 나타낼 수 있도록 [][]를 작성한다.
3) 평균은 sum / 총 합을 나타내는데 그 총 합은 행의 첫번째 자리 * 열의 첫번째자리를 곱하면 자연스럽게 나온다. 이 때 행은 arr.length로 나타내주고 열은 arr[0].length로 설정하여 첫번째 열의 자리의 길이를 구할 수 있도록 한다.
4) 방법2에는 avg를 반복문 안에 넣어버렸다. 0부터 시작된 avg는 반복문이 돌아가면서 반복문끝까지 함께 하게 되고 반복문이 총 몇번 돌아갔는지를 체크하여 자연스럽게 arr배열의 갯수를 알 수 있게 된다.
5) 반복문의 갯수가 담겨있는 avg에 sum을 나눈 값을 다시 avg에 넣어 데이터를 아꼈다.
▶문제 5
다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오. ([참고] Math.random()을 사용했기 때문에 실행결과와 다를 수 있다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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];
for(int i=0; i< ballArr.length;i++) {
a) int j = (int)(Math.random() * ballArr.length);
b) int tmp = 0;
/*
c) (1) 알맞은 코드를 넣어 완성하시오.
*/ }
d) /* (2) */
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]); // 결과 : 486
}
}
}
|
cs |
[답]
(1)
tmp = ballArr[i];
ballArr[i] = ballArr[j];
ballArr[j] = tmp;
(2)
System.arraycopy(ballArr,0, ball3,0,3);
[해설]
a)Math.random(); 함수는 double형으로 0.0~0.9X..까지의 값을 반환한다.
b)임시저장변수로서 tmp 변수를 만들어준다.
c)만약, ballArr[i]의 i가 1일경우, {1,2,3,4,5,6,7,8,9}의 값이 있는 ballArr의 배열으로 ballArr[i]는 "2"가되고 이 "2"의 값은 tmp에 저장된다. java는 위에서 밑으로 내려가기에 두번째줄의 ballArr[i]는 여전히 ballArr[1]을 유지한채로 ballArr[j]를 만나게되는데 이 상태에서 j역시 랜덤한 값을 받게된다. 예를들어 ballArr[1] = ballArr[4]의 경우가 된다면? j인 ballArr[4]의 값은 "5"가 되고 ballArr[1] = 5 값으로 변경된다. 그럼 ballArr의 값은 {1,5,3,4,5,6,7,8,9}가 되고 마지막줄로 내려간다. ballArr[j]는 ballArr[4]로 마지막줄까지 내려오게되고 tmp를 만나게되는데 여기엔 처음 ballArr[1]이 담아두었던 "2"라는 값이 존재함으로 ballArr[4]의 값은 2가 되게되고 최종적으로 ballArr의 배열은 {1,5,3,4,2,6,7,8,9}로 변경된다.
d)
▶문제 6
다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다.
변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라.
단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다.
(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
[Hint] 나눗셈 연산자와 나머지 연산자를 사용해야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
|
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) 알맞은 코드를 넣어 완성하시오.
*/ }
}
// 500원 = 5장
// 100원 = 1장
// 50원 = 1장
// 10원 = 3장
}
|
cs |
[답]
System.out.println(coinUnit[i]+"원: "+money/coinUnit[i]);
money = money%coinUnit[i];
[풀이]
500원이 몇개필요한지, 100원이 몇개필요한지는 총 money 에서 나누기 500을 하면 필요한 500의 수가 나온다. coinUnit배열 안에 {500, 100, 50, 10}의 값이 순차적으로 있으니 이 값을 i를 통해 순차적으로 나오게하고 값을 나누면 500 - 100 - 50 - 10순으로 필요한 동전의 수가 나오게되는데 여기서 포인트는 처음 500원에서 나누기를 한 값이 money에 누적이 되어야하고 그 누적된 값이 100과 나누어져야한다는 것이다. 그러기 위해 %를 사용하여 500원으로 나눈 후 money를 %로 몫을 때내고 나머지의 값만 저장시켜 100과 나누게 한다. 동전의 갯수(coinUnit.length)만큼 반복시킨다.
▶문제 7
다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 '*'을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class Array {
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**** */
|
cs |
[아직 못품]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Array {
public static void main(String[] args) {
int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
int[] counter = new int[4];
int a = 0;
for (int i = 0; i < counter.length; i++) {
a = answer[i] - 0 ;
System.out.print(a + ",");
for(int j = 0; j <a; j++){
System.out.print("*");
} System.out.println();
}
}
}
/*1,*
4,****
4,****
3,***
*/
|
cs |
▶문제 9
주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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]);
}S
ystem.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]);
}S
ystem.out.println();
}
} // end of main
} // end of class
|
cs |