[5-1] 다음은 배열을 선언하거나 초기화 한 것이다. 잘못된 것을 고르고 그 이유를 설명하시오
1) int[] arr[];
이차원 배열은 타입과 변수명이 대괄호를 나눠가지게 가능하다.
2) int[] arr = {1,2,3};
new 연산자 생략하고 선언생성 가능
3) int[] arr = new int[5];
일차원 배열 선언 및 초기화
4) int[] arr = new int[5]{1,2,3,4,5};
배열생성시 대괄호 안에 크기를 적음과 동시에 중괄호에 배열값들을 선언할 수없다.
5) int arr[5];
선언부분에 []안에 배열수를 넣는게 틀렸다.
6) int[] arr[] = new int[3][];
열이 정해지지않은 이차원배열의 선언
[5-2] 다음과 같은 배열이 있을 때
int[][] arr= {
{5,5,5,5,5},
{10,10,10},
{20,20,20,20},
{30,30}
}
(1) arr[3] :30
(2) arr.length : 4
(3) System.out.println(arr[4,1]); : error
[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램 완성하시오.
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="+sum);
[5-4] 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.
int[][] arr= {
{5,8,13,5,2},
{22,13,28},
{2,18,23,62}};
int total = 0;
float average = 0;
int count = 0;
for(int i = 0; i<arr.length; i++){
for(int j = 0; j<arr[i].length; j++){
count++;
total +=arr[i][j];
}
}
average = (int)((float)total/count*100+0.5)/100F;
System.out.println("total ="+ total);
System.out.println("Average ="+average);
[5-5] 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다.
변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라.
단, 가능한 한 적은 수의 동전으로 거슬러 주어야 한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오
int[] coinUnit = {500,100,50,10};
int money = 2790;
int[] co = new int[coinUnit.length];
for(int i = 0; i<coinUnit.length;i++){
co[i] = money/coinUnit[i]; //2790 500으로 나눠서 5라는 몫이 count[0]에 들어감
money = money%coinUnit[i]; //돈을 500으로 나눈것의 나머지만 머니라고 한다.
System.out.println(coinUnit[i]+"원 :" + co[i]+"개");
}
[5-6] 다음은 1과 9 사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다.
int[] ballArr = {1,2,3,4,5,6,7,8,9};
int[] ball3 = new int[3];
for(int i = 0; i <ballArr.length;i++){
int q = (int) (Math.random()*ballArr.length); //9미만 즉 index 0~8사이
int temp = ballArr[i];
ballArr[i]= ballArr[q];
ballArr[q]= temp;
}
System.out.println("랜덤:");
for(int i = 0 ; i<ballArr.length; i++){
System.out.print( ballArr[i]);
}
System.out.println();
for(int i = 0; i <ball3.length; i++){
ball3[i]=ballArr[i];
}
for(int i =0; i<ball3.length;i++){
System.out.println(ball3[i]);
}
[5-7] 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서
개수만큼 '*'를 찍어서 그래프를 그리는 프로그램이다.
int[] answer = {1,4,3,2,1,2,3,2,1,4};
int[] counter = new int[4];
for(int i = 0; i<answer.length;i++){
switch(answer[i]){
case 1: counter[0]++;
break;
case 2: counter[1]++;
break;
case 3: counter[2]++;
break;
case 4: counter[3]++;
break;
}
}
for(int i = 0; i<counter.length;i++){
System.out.print(i+1 +":"+ counter[i] + "개");
for(int k = 0; k<counter[i];k++){System.out.print("*");}
System.out.println();
}
이렇게 풀었는데, switch문 대신 for문으로 줄이면,
int[] answer = {4,1,3,2,1,2,3,2,1,4};
int[] counter = new int[4];
for(int i = 0; i<answer.length;i++){
if(answer[i]>0){
counter[answer[i]-1]++;
}
}
for(int i = 0; i<counter.length;i++){
System.out.print(i+1 +":"+ counter[i] + "개");
for(int k = 0; k<counter[i];k++){System.out.print("*");}
System.out.println();
}
//hidden answer값의 범위를 측정하여 최대 5개의 통계만들기
~몰러~
[5-8] 문제 5-5에 동전의 개수를 추가한 프로그램이다.
커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다.
보유한 동전의 개수로 거스름돈을 지불할 수 없으면, '거스름돈이 부족합니다'라고 출력하고 종료한다.
지불할 돈이 충분히 있으면, 거스름돈을 지불한 만큼 가진 돈에서 빼고 남은 동전의 개수르 화면에 출력한다.
(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
int money = 8740;
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]; //
if(coin[i]>=coinNum){ //예산안일떄
coin[i]=coin[i]-coinNum; //지갑안 동전갯수는 지갑안동전갯수에서 거스름돈줘야할만큼빼기
money = money-coinNum*coinUnit[i];//총액은 총액-거슬러줄금액*거슬러줄갯수
}else{ //예산밖일때
//일단 지갑안의 코인갯수는 -가 되지않게 0개로 해주고
money = money-coinUnit[i]*coin[i]; //총액은 총액-coinUnit*coin[5]
coin[i]=0;
}
System.out.println(coinUnit[i]+"원:" + coinNum); // 몇개드는지
}
if(money > 0){
///
System.out.println("=남은 동전의 갯수 =");
for(int j =0; j<coinUnit.length;j++){
System.out.println(coinUnit[j]+"원"+coin[j]+"개 남음");
}
//
System.out.println("거스름돈이 부족합니다.");
System.exit(0);
}
System.out.println("=남은 동전의 갯수 =");
for(int i =0; i<coinUnit.length;i++){
System.out.println(coinUnit[i]+"원"+coin[i]+"개 남음");
}
[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++){
//////////
//result[j][i]= star[i][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]);
}
}
왜 star.length에서 1을 뺴는지는 모르겠음... 3은알겠음
'학원수업_basicJAVA > 100. 연습문제' 카테고리의 다른 글
Exam_03 추가과제 (0) | 2020.10.16 |
---|---|
Exam_03 (0) | 2020.10.16 |
Exam 01 (0) | 2020.10.12 |
Exam 02 (0) | 2020.10.12 |