[Java]자바의 정석 5장 배열 연습문제 풀이

jh5959·2025년 5월 19일

Java

목록 보기
5/9

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]; //불가능, 선언할 때는 배열의 크기 지정X
f.	int[] arr[] = new int[3][];//가능 

5-6 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변 수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하 라. 단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
[Hint] 나눗셈 연산자와 나머지 연산자를 사용해야 한다.

public class ex5_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++){
            System.out.println(coinUnit[i]+"원: "+(money/coinUnit[i]));
            money=money%coinUnit[i];
        }
    }
}

실행결과
money=2680
500원: 5
100원: 1
50원: 1
10원: 3

5-7 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, ‘거스름 돈이 부족합니다.’라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불 한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣 어서 프로그램을 완성하시오.

public class ex5_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.금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다
            //답
            coinNum=money/coinUnit[i];

            //2.배열 coin에서 coinNum만큼의 동전을 뺀다
            //만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다
            //답
            if(coin[i]>=coinNum){
                coin[i]-=coinNum;
            }else {
                coinNum=coin[i];
                coin[i]=0;
            }

            //내가 쓴 답, 1번과 2번이 합쳐짐
//            if((money/coinUnit[i])>coin[i]) {
//                coinNum = coin[i];
//            } else
//                coinNum=money/coinUnit[i];
//
//            coin[i]=coin[i]-coinNum;

            //3.금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다
            money=money-coinNum*coinUnit[i];

            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]);
        }
    }
}

실행결과:
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
거스름돈이 부족합니다.

5-9 주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성하시오.

public class ex5_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++){//4까지
            for(int j=0; j<star[i].length; j++){//5까지
                //result[j][i]=star[3-i][j]; //3은 star.length임, star.length는 4니까 1빼야 함,
                result[j][i]=star[star.length-1-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)에 알맞은 코드를 넣어서 완성하시오.

public class ex5_10 {
    public static void main(String[] args) {
        char[] abcCode=
                {'`','~','!','@','#','$','%','^','&','*',
                        '(',')','-','_','+','=','|','[',']','{',
                        '}',';',':',',','.','/'};

        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);
            if(ch>='a'&&ch<='z'){
                result+=abcCode[ch-'a'];
            }else if(ch>='0'&&ch<='9')
                result+=numCode[ch-'0'];
        }

        System.out.println("src:"+src);
        System.out.println("result:"+result);


    }
}

실행결과:
src:abc123 result:` ~!wer

5-12 예제5-23을 변경하여, 아래와 같은 결과가 나오도록 하시오.

import java.util.Scanner;

public class ex5_12 {
    public static void main(String[] args) {
        String [][] words={
                {"chair","의자"},
                {"computer","컴퓨터"},
                {"integer","정수"}
        };
        Scanner sc=new Scanner(System.in);
        int count=0;
        for(int i=0; i<words.length; i++){
            System.out.printf("Q%d %s의 뜻은? ",i+1,words[i][0]);

            String tmp=sc.nextLine();

            if(tmp.equals(words[i][1])){
                System.out.printf("정답입니다. %n%n");
                count++;
            }else {
                System.out.printf("틀렸습니다. 정답은 %s 입니다. %n%n",words[i][1]);
            }
        }
        System.out.printf("전체 %d문제 중 %d문제 맞추셨습니다",words.length,count);
    }
}

실행결과:

Q1. chair의 뜻은? dmlwk
틀렸습니다. 정답은 의자입니다

Q2. computer의 뜻은? 컴퓨터 
정답입니다.

Q3. integer의 뜻은? 정수 
정답입니다.

전체 3문제 중 2문제 맞추셨습니다.

[5-13] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.

import java.util.Scanner;
public class ex5_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을 cher[]로 변환
            for(int j=0; j< question.length; j++){
                int k=(int)Math.random()* question.length+1;
                char temp=question[j];
                question[j]=question[k];
                question[k]=temp;
            }

            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");
        }

    }
}

실행결과:
Q1. lvtsieeoin의 정답을 입력하세요.>television
맞았습니다.
Q2. otepcumr의 정답을 입력하세요.>computer
맞았습니다.
Q3. usemo의 정답을 입력하세요.>asdf
틀렸습니다.
Q4. ohpne의 정답을 입력하세요.>phone
맞았습니다.

0개의 댓글