[명품자바]2장 실습문제

sum·2022년 6월 4일
0

명품자바

목록 보기
7/17

1

Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라. $1=1100원으로 가정하고 계산하라.

원화를 입력하세요(단위 원) >> 3300
3300원은 $3.0입니다.

코드

import java.util.Scanner;

public class WonToDollar {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("원화를 입력하세요(단위 원)>>");
        int won = sc.nextInt();
        double dollar = won/1100;
        System.out.println(won+"원은 $"+dollar+"입니다.");

        sc.close();
    }
}

2

Scanner 클래스를 이용하여 2자리의 정수(10~99)를 입력받고, 십의 자리와 1의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.

2자리수 정수 입력(10~99)>>77
Yes! 10의 자리와 1의 자리가 같습니다.

코드

import java.util.Scanner;

public class EqualToDigitsOf10And1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("2자리수 정수 입력(10~99)>>");
        int num = sc.nextInt();

        if(num>9&&num<100) {
            int ten = num/10; //10의 자리수는 입력받은 정수를 10으로 나누었을 때의 몫
            int one = num%10; //1의 자리수는 입력받은 정수를 10으로 나누었을 때의 나머지

            if(ten == one) {
                System.out.println("YES! 10의 자리와 1의 자리가 같습니다.");
            } else {
                System.out.println("NO! 10의 자리와 1의 자리가 다릅니다.");
            }
        } else {
            System.out.println("정수 범위 초과");
        }

        sc.close();
    }
}

3

Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만원권, 만원권, 천원권, 500원짜리 동전, 100원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라.

금액을 입력하시오>>65376
오만원권 1매
만원권 1매
천원권 5매
백원 3개
오십원 1개
십원 2개
일원 6개

코드

import java.util.Scanner;

public class ChangeMoneyBasic {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("금액을 입력하시오>>");
        int money = sc.nextInt();

        System.out.println("오만원권 "+money/50000+"매");
        money%=50000;
        System.out.println("만원권 "+money/10000+"매");
        money%=10000;
        System.out.println("오천원권 "+money/5000+"매");
        money%=5000;
        System.out.println("천원권 "+money/1000+"매");
        money%=10000;
        System.out.println("오백원 "+money/500+"개");
        money%=500;
        System.out.println("백원 "+money/100+"개");
        money%=100;
        System.out.println("오십원 "+money/50+"개");
        money%=50;
        System.out.println("십원 "+money/10+"개");
        money%=10;
        System.out.println("일원 "+money+"개");

        sc.close();
    }
}
가장 단순한 방식이지만 예시와는 달리 반환 불가한 경우에도 0매 또는 0개로 노출이 됩니다.
import java.util.Scanner;

public class ChangeMoney {
    public static void main(String[] args){
        int num; //지폐의 장수 또는 동전의 개수

        Scanner sc = new Scanner(System.in);
        System.out.print("금액을 입력하시오>>");
        int money = sc.nextInt();

        num = money/50000;
        money%=50000;
        if(num>0)   System.out.println("오만원권 "+num+"매");

        num = money/10000;
        money%=10000;
        if(num>0)   System.out.println("만원권 "+num+"매");

        num = money/5000;
        money%=5000;
        if(num>0)   System.out.println("오천원권 "+num+"매");

        num = money/1000;
        money%=10000;
        if(num>0)   System.out.println("천원권 "+num+"매");

        num = money/500;
        money%=500;
        if(num>0)   System.out.println("오백원 "+num+"개");

        num = money/100;
        money%=100;
        if(num>0)   System.out.println("백원 "+num+"개");

        num = money/50;
        money%=50;
        if(num>0)   System.out.println("오십원 "+num+"개");

        num = money/10;
        money%=10;
        if(num>0)   System.out.println("십원 "+num+"개");

        num = money;
        if(num>0)   System.out.println("일원 "+num+"개");

        sc.close();
    }
}
자동으로 교환되지 않은 지폐나 동전은 실행 결과에 노출되지 않습니다.
import java.util.Scanner;

public class ChangeMoneyArray {
    public static void main(String[] args){
        int num; //지폐의 장수 또는 동전의 개수
        int index[] = {50000, 10000, 5000, 1000, 500, 100, 50, 10, 1};

        Scanner sc = new Scanner(System.in);
        System.out.print("금액을 입력하시오>>");
        int money = sc.nextInt();


        for(int i=0; i<index.length; i++){
            num = money/index[i];
            money%=index[i];

            if(i<4) { //지폐
                if (num > 0) System.out.println(index[i] + "원권 " + num + "매");
           } else { //동전
                if (num > 0) System.out.println(index[i] + "원 " + num + "개");
            }
        }

        sc.close();
    }
}
배열을 이용한 경우입니다.

4

Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의하라.

정수 3개 입력>>20 100 33
중간값은 33

코드

import java.util.Scanner;

public class PrintMedianBasic {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        System.out.print("정수 3개 입력>>");
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();

        if(num2<num1&&num1<num3)    System.out.println("중간값은 "+num1+"입니다.");
        else if (num1<num2&&num2<num3)  System.out.println("중간값은 "+num2+"입니다.");
        else System.out.println("중간값은 "+num3+"입니다.");

        sc.close();
    }
}
같은 수를 입력받았을 때 중간값을 제대로 출력하지 못합니다.
import java.util.Scanner;

public class PrintMedian {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        System.out.print("정수 3개 입력>>");
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();

        if(num1!=num2 && num2!=num3 && num3!=num1) { // 입력받은 값이 서로 다른 3개의 정수일 때
            if (num2 < num1 && num1 < num3) System.out.println("중간값은 " + num1 + "입니다.");
            else if (num1 < num2 && num2 < num3) System.out.println("중간값은 " + num2 + "입니다.");
            else System.out.println("중간값은 " + num3 + "입니다.");
        } else { // 입력받은 값 중에 서로 같은 정수가 있는 경우
            if (num1 == num2) {
                System.out.println("중간값은 " + num1 + "입니다.");
            } else if (num2 == num3) {
                System.out.println("중간값은 " + num2 + "입니다.");
            } else System.out.println("중간값은 " + num3 + "입니다.");
        }
        sc.close();
    }
}
입력받은 값 중 서로 같은 정수가 두 개 이상 있어도 중간값을 제대로 출력할 수 있습니다.

5

Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라. 삼각형이 되려면 두변의 합이 다른 한 변보다 커야 한다.

정수 3개를 입력하시오>>4 3 5
삼각형이 됩니다.

코드

import java.util.Scanner;

public class MakeTriangle {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수 3개를 입력하시오>>");
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if(a+b<c || b+c<a || c+a<b) System.out.println("삼각형이 되지 못합니다.");
        else System.out.println("삼각형이 됩니다.");
        
        sc.close();
    }
}

6

369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를 들면, 키보드로 입력된 수가 13인 경우 "박수짝"을, 36인 경우 "박수짝짝"을 출력하면 된다.

1~99 사이의 정수를 입력하시오>>36
박수짝짝

코드

import java.util.Scanner;

public class Game369 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("1~99 사이의 정수를 입력하시오>>");
        int num = sc.nextInt();
        int ten = num/10;
        int one = num%10;

        if(num<100) {
            if(ten==3 || ten==6 || ten==9) {
                if(one==3 || one==6 || one==9)  System.out.println("박수짝짝");
                else System.out.println("박수짝");
            } else {
                if(one==3 || one==6 || one==9) System.out.println("박수짝");
                else System.out.println(num);
            }
        } else System.out.println("정수 범위 초과");

        sc.close();
    }
}

7

2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. (100, 100)과 (200, 200)의 두 점으로 이루어진 사각형이 있을 때, Scanner를 이용하여 정수 x와 y값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.

점 (x, y)의 좌표를 입력하시오>>150 150
(150, 150)는 사각형 안에 있습니다.

코드

import java.util.Scanner;

public class XYRect {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("점 (x,y)의 좌표를 입력하시오>>");
        int x = sc.nextInt();
        int y = sc.nextInt();

        if(x>99&&x<201&&y>99&&y<201){
            System.out.println("("+x+", "+y+")는 사각형 안에 있습니다.");
        } else System.out.println("("+x+", "+y+")는 사각형 안에 없습니다.");

        sc.close();
    }
}

8

2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 직사각형을 구성하는 두 점 (x1, y1), (x2, y2)를 입력받아 (100, 100), (200, 200)의 두 점으로 이루어진 직사각형과 충돌하는지 판별하는 프로그램을 작성하라.

HINT

다음은 점 (x,y)가 (rectx1, recty1), (rectx2, recty2)의 사각형 안에 있으면 true를 리턴하는 메소드이다. 이 메소드를 활용하라.

public static boolean inRect(int x, int y, int rectx1, int recty1, int rectx2, int recty2) {
    if((x >= rectx1 && x <= rectx2) && (y >= recty1 && y <= recty2))
        return true;
     else
        return false;
}
(x1, y1) 의 값을 입력해 주세요 >>150 150
(x2, y2) 의 값을 입력해 주세요 >>300 300
두 사각형은 충돌합니다.

코드

import java.util.Scanner;

public class XYRectCrush {
    public static boolean inRect(int x, int y){
        if(x>99&&x<201&y>99&&y<201){
            return true;
        } else{
            return false;
        }
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("(x1,y1)의 좌표를 입력하시오>>");
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();

        System.out.print("(x2,y2)의 좌표를 입력하시오>>");
        int x2 = sc.nextInt();
        int y2 = sc.nextInt();


        boolean rect1 = inRect(x1, y1);
        boolean rect2 = inRect(x2, y2);

        if(rect1==true || rect2==true){
            System.out.println("두 사각형은 충돌합니다.");
        } else System.out.println("두 사각형은 충돌하지 않습니다.");

        sc.close();
    }
}

9

원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점 (x, y)를 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라.

HINT

중심에서 점 (x, y) 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다. 변수 x에 대한 제곱근의 값은 Math.sqrt(x)를 이용하면 된다. Math는 6장에서 설명한다.

원의 중심과 반지름 입력>>10 10 6.5
점 입력>>13 13(13,13)는 원 안에 있다.

코드

import java.util.Scanner;

public class XYCircle {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("원의 중심과 반지름 입력>>");
        int cx = sc.nextInt();
        int cy = sc.nextInt();
        double r = sc.nextDouble();

        System.out.print("점 입력>>");
        int x = sc.nextInt();
        int y = sc.nextInt();

        double distance = Math.sqrt((cx-x)*(cx-x)+(cy-y)*(cy-y));

        if(distance<r)  System.out.println("점 ("+x+", "+y+")는 원 안에 있다.");
        else    System.out.println("점 ("+x+", "+y+")는 원 안에 없다.");

        sc.close();
    }
}

10

원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.

첫번째 원의 중심과 반지름 입력>>10 10 3
두번째 원의 중심과 반지름 입력>>12 12 2
두 원은 서로 겹친다.

코드

import java.util.Scanner;

public class OverlapCircles {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("첫번째 원의 중심과 반지름 입력>>");
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();
        double r1 = sc.nextDouble();

        System.out.print("두번째 원의 중심과 반지름 입력>>");
        int x2 = sc.nextInt();
        int y2 = sc.nextInt();
        double r2 = sc.nextDouble();

        double distance = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

        if(distance>r1+r2)  System.out.println("두 원은 서로 겹치지 않는다.");
        else System.out.println("두 원은 서로 겹친다.");

        sc.close();
    }
}

11

숫자를 입력받아 3~5는 "봄", 6~8은 "여름", 9~11은 "가을", 12,1,2의 경우 "겨울"을, 그 외 숫자를 입력한 경우 "잘못입력"을 출력하는 프로그램을 작성하라.

달을 입력하세요(1~12)>>9
가을

코드

(1) if-else 문을 이용하여 프로그램을 작성하라.

import java.util.Scanner;

public class InNumOutSeasonIf {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("달을 입력하세요(1~12)>>");
        int num = sc.nextInt();
        if(num>2&&num<6)    System.out.println("봄");
        else if (num>5&&num<9)  System.out.println("여름");
        else if (num>8&&num<12)  System.out.println("가을");
        else if(num==12||num==1||num==2)  System.out.println("겨울");
        else    System.out.println("잘못입력");

        sc.close();
    }
}

(2) switch 문을 이용하여 프로그램을 작성하라.

import java.util.Scanner;

public class InNumOutSeasonSwitch {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("달을 입력하세요(1~12)>>");
        int num = sc.nextInt();

        switch (num) {
            case 1:
            case 2:
                System.out.println("겨울");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("봄");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("여름");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("가을");
                break;
            case 12:
                System.out.println("겨울");
                break;
            default:
                System.out.println("잘못입력");
                break;
        }
        
        sc.close();
    }
}

12

사칙연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 +, -, *, /의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다."를 출력하고 종료한다.

HINT

연산자는 scanner.next()를 이용하여 문자열로 입력받으면 된다. 문자열 s가 "+"와 같은지 검사하려면 if(s.equals("+"))를 이용하며, true이면 s와 "+"가 같다.

연산>>2 + 4
2.0+4.0의 계산 결과는 6.0

코드

(1) 연산식을 구분할 때 if-else 문을 이용하여 프로그램을 작성하라.

import java.util.Scanner;

public class OperatorCalcIf {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("연산>>");
        double x = sc.nextDouble();
        String operator = sc.next();
        double y = sc.nextDouble();

        double result;

        if(operator.equals("+")){
            result = x+y;
            System.out.println(x+operator+y+"의 계산 결과는 "+result);
        } else if (operator.equals("-")) {
            result = x-y;
            System.out.println(x+operator+y+"의 계산 결과는 "+result);
        } else if (operator.equals("*")) {
            result = x*y;
            System.out.println(x+operator+y+"의 계산 결과는 "+result);
        } else if (operator.equals("/")) {
            result = x/y;
            System.out.println(x+operator+y+"의 계산 결과는 "+result);
        } else {
            System.out.println("잘못입력");
        }

        sc.close();
    }
}

(2) 연산식을 구분할 때 switch 문을 이용하여 프로그램을 작성하라.

import java.util.Scanner;

public class OperatorCalcSwitch {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("연산>>");
        double x = sc.nextDouble();
        String operator = sc.next();
        double y = sc.nextDouble();

        double result;

        switch (operator) {
            case "+":
                result = x + y;
                System.out.println(x + operator + y + "의 계산 결과는 " + result);
                break;
            case "-":
                result = x - y;
                System.out.println(x + operator + y + "의 계산 결과는 " + result);
                break;
            case "*":
                result = x * y;
                System.out.println(x + operator + y + "의 계산 결과는 " + result);
                break;
            case "/":
                result = x / y;
                System.out.println(x + operator + y + "의 계산 결과는 " + result);
                break;
            default:
                System.out.println("잘못입력");
                break;
        }

        sc.close();
    }
}

0개의 댓글