[출처] 자바의 정석 3판 연습문제 Chapter 5
[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. int[] arr = new int[]{1,2,3,4,5} 에서는 대괄호[] 안에 배열의 크기를 지정할
수 없다 괄호 안의 데이터의 개수에 따라 자동적으로 결정되기 때문이다 .
5-5) 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1)~(2) 에 알맞은 코드를 넣어서 프로그램을 완성하시오 .
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)번
tmp = ballArr[i];
ballArr[i]= ballArr[j];
ballArr[j]= tmp;
//
}
// 배열 ballArr의 앞에서 3개의 수를 배열 Ball3로 복사한다.
// (2)번
for(int i=0; i<3; i++) {
ball3[i] = ballArr[i];
}
//
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]);
}
}
}
5-11) 주어진 차원 배열의 데이터보다 가로와 세로로 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
}
답안)
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[0].length] += result[i][j];
result[score.length][j] += result[i][j];
result[score.length][score[0].length] += result[i][j];
}
}
처음 3줄의 코드 작성 아이디어는 잘 떠올랐는데
마지막줄, 그러니까 배열의 가장 마지막 행의 마지막 열 값을 만드려면 반복문 안에서 어떻게 코드를 작성해야 하는지 많이 헤멨다.
내가 작성한 답안은 이랬다.
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][score[i].length] += result[i][score[i].length];
}
모범답안은 그냥 심플하게 모든 배열의 수를 그대로 다 더해줬는데
나는 새로 추가된 수들을 이용해서 만들어야 된다는 생각밖에 들지 않아서
결국 새로 추가된 result[i][score[i].length] 를 더해주는 방법을 고심하다가 겨우 찾게 되었는데
정답을 보니 좀 허무하긴 했다.
나는 직감적으로 코드가 떠오르지 않으면 많이 헤메게 된다.
직감에만 의존하는건 아무래도 그냥 때려맞추는 느낌이라 장기적으로 전혀 도움이 되지 않는 것 같다.
자꾸 논리적으로 생각하고 손으로 써보기도 하면서 반복문의 반복횟수(i와 j)와 내가 구하고자 하는 결과와의 관계식을
세우려는 방향으로 연습을 해야 할 것 같다.
[출처] 자바의 정석 3판 연습문제 Chapter 5
'Java > Java의 정석 연습문제 오답노트' 카테고리의 다른 글
220326 Java - Chapter 8 연습문제 (0) | 2022.03.29 |
---|---|
220326 Java - Chapter 7 연습문제 (0) | 2022.03.26 |
220323 Java - Chapter 6 연습문제 (0) | 2022.03.23 |
220318 Java - Chapter 4 연습문제 (0) | 2022.03.19 |
220318 Java - Chapter 3 연습문제 (0) | 2022.03.18 |