본문 바로가기
1. Java 자바/1_0. 책, 강의

[명품 자바 프로그래밍] 2장 110~112쪽 연습문제 실습문제_정답

by 비소야 2022. 10. 5.
728x90

명품 자바 프로그래밍 2장 110~112쪽 연습문제 실습문제_정답

luxury java programming ch2 p110~112 exercise practice correct answer
1번

 

답: 

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
import java.util.Scanner;                                       
 
public class Ch2_1 {                                            
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 변수 및 상수 선언
        final double rate = 1100.0;
 
        int won = 0;
        double dollar = 0;
 
        // 1. 원화 입력
        System.out.print("원화를 입력하세요(단위 원)>>");
        won = scanner.nextInt();
 
        // 2. 달러화 연산
        dollar = won/rate;
 
        // 3. 결과 출력
        System.out.println(won + "원은 $"+ dollar +"입니다.");
 
        scanner.close();
    }
}                                                              
 
cs

 

2번

 

답: 

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
import java.util.Scanner;
 
public class Ch2_2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int number, ten, one;
        String result = "";
 
        // 로직
        // 1. 정수 입력
        System.out.print("2자리 정수 입력(10~99)>>");
        number = scanner.nextInt();
 
        // 2. 십의 자리, 일의 자리 같은지 판별
        ten = number / 10;
        one = number % 10;
 
        if(ten == one)
            result = "Yes! 10의 자리와 1의 자리가 같습니다.";
        else
            result = "No! 10의 자리와 1의 자리가 다릅니다.";
 
        // 3. 결과 출력
        System.out.println(result);
 
        scanner.close();
    }
}
cs

 

// 두 자리 정수의 십의 자리 수와 일의 자리 수 추출은 나누기, 나머지 연산자를 이용하여 할 수 있다.

3번

 

답: 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.Scanner;
 
public class Ch2_3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int money;
        int manwon5, manwon1, cheonwon1, baekwon5, baekwon1, sibwon5, sibwon1, won1;
 
        // 로직
        // 1. 돈 입력
        System.out.print("금액을 입력하시오>>");
        money = scanner.nextInt();
 
        // 2. 지폐 단위별 개수 변환
        manwon5 = money / 50000;
        money = money % 50000;
        manwon1 = money / 10000;
        money = money % 10000;
        cheonwon1 = money / 1000;
        money = money % 1000;
        baekwon5 = money / 500;
        money = money % 500;
        baekwon1 = money / 100;
        money = money % 100;
        sibwon5 = money / 50;
        money = money % 50;
        sibwon1 = money / 10;
        money = money % 10;
        won1 = money / 1;
 
        // 3. 결과 출력
        if (manwon5 != 0) {
            System.out.println("오만원권 " + manwon5 + "매");
        }
        if (manwon1 != 0) {
            System.out.println("만원권 " + manwon1 + "매");
        }
        if (cheonwon1 != 0) {
            System.out.println("천원권 " + cheonwon1 + "매");
        }
        if (baekwon5 != 0) {
            System.out.println("오백원 " + baekwon5 + "개");
        }
        if (baekwon1 != 0) {
            System.out.println("백원 " + baekwon1 + "개");
        }
        if (sibwon5 != 0) {
            System.out.println("오십원 " + sibwon5 + "개");
        }
        if (sibwon1 != 0) {
            System.out.println("십원 " + sibwon1 + "개");
        }
        if (won1 != 0) {
            System.out.println("일원 " + won1 + "개");
        }
 
        scanner.close();
    }
}
cs

 

4번

 

답: 

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
31
32
33
34
35
36
37
import java.util.Scanner;                                                       // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_4 {                                                            // Ch2_4 클래스 정의 시작
    public static void main(String[] args) {                                    // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);                               // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        int a, b, c;                                                            // int형 변수 a, b, c 선언, 정수 3개
        int median;                                                             // int형 변수 median 선언, 중간값
 
        // 로직
        // 1. 정수 3개 입력
        System.out.print("정수 3개 입력>>");                                      // System.out.print() 메소드 호출하여 문자열 "정수 3개 입력>>" 출력, 정수 3개 입력 안내 메세지 출력
        a = scanner.nextInt();                                                  // 변수 a에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
        b = scanner.nextInt();                                                  // 변수 b에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
        c = scanner.nextInt();                                                  // 변수 c에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
 
        // 2. 중간값 판별
        // a가 중간값인 경우
        if (((b <= a) && (a <= c)) || ((c <= a) && (a <= b))) {                 // 만약 b가 a보다 작거나 같고 a가 c보다 작거나 같거나, c가 a보다 작거나 같고 a가 b보다 작거나 같으면
            median = a;                                                         // median에 a 대입하여 초기화, 중간값은 a
        }
        // b가 중간값인 경우
        else if (((a <= b) && (b <= c)) || ((c <= b) && (b <= a))) {            // 그렇지 않고 만약 a가 b보다 작거나 같고 b가 c보다 작거나 같거나, c가 b보다 작거나 같고 b가 a보다 작거나 같으면
            median = b;                                                         // median에 b 대입하여 초기화, 중간값은 b
        }
        // c가 중간값인 경우
        else {                                                                  // 그렇지 않으면
            median = c;                                                         // median에 c 대입하여 초기화, 중간값은 c
        }
 
        // 3. 결과 출력
        System.out.println("중간값은 " + median);                                // System.out.println() 메소드 호출하여 문자열 "중간값은 " + median 출력, 중간값 출력 안내 메세지 출력
 
        scanner.close();                                                        // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                                           // main() 메소드 정의 끝
}                                                                               // Ch2_4 클래스 정의 끝
cs

 

// 평균 값 찾아내기는 순열이므로 총 6가지, 중간 값은 3가지의 경우가 있다.

 

// a이 중간 값인 경우는 총 2가지이다. b <= a <= c 인 경우와 c <= a <= b인 경우가 있다.

 

// b이 중간 값인 경우는 총 2가지이다. a <= b <= c 인 경우와 c <= b <= a 인 경우가 있다.

 

// c이 중간 값인 경우는 총 2가지이다. a <= c <= b 인 경우와 b <= c <= a 인 경우가 있다.

 

5번

 

답: 

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
import java.util.Scanner;                                                           // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_5 {                                                                // Ch2_5 클래스 정의 시작
    public static void main(String[] args) {                                        // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);                                   // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        int a, b, c;                                                                // int형 변수 a, b, c 선언, 삼각형의 세 변의 길이
        boolean isTriangle = false;                                                 // boolean형 변수 isTriangle 선언 동시에 false 대입하여 초기화, 삼각형 가능 여부
 
        // 로직
        // 1. 세 변의 길이 입력
        System.out.print("정수 3개를 입력하시오>>");                                 // System.out.print() 메소드 호출하여 문자열 "정수 3개를 입력하시오>>" 출력, 정수 3개 입력 안내 메세지 출력
        a = scanner.nextInt();                                                      // 변수 a에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
        b = scanner.nextInt();                                                      // 변수 b에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
        c = scanner.nextInt();                                                      // 변수 c에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
 
        // 2. 삼각형 여부 판별
        if((a + b > c) || (a + c > b) || (b + c > a)) {                             // a + b가 c보다 크거나 a + c가 b보다 크거나 b + c가 a보다 크면
            isTriangle = true;                                                      // 변수 isTriangle에 true 대입
        }
 
        // 3. 판별 결과 출력
        System.out.println("삼각형이 " + (isTriangle? "됩니다.""되지 못합니다.")); // System.out.println() 메소드 호출하여 문자열 "삼각형이 " + (isTriangle? "됩니다.": "되지 못합니다.") 출력, 삼각형 판별 결과 출력
 
        scanner.close();                                                            // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                                               // main() 메소드 정의 끝
}                                                                                   // Ch2_5 클래스 정의 끝
cs

 

// 삼각형이 되려면 두 변의 합이 다른 한 변의 길이 보다 커야 한다.

 

// 두 변의 합은 조합이므로 총 3가지 경우의 수가 있다.

 

6번

 

답: 

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
31
32
33
34
35
36
37
38
39
import java.util.Scanner;                                       // 다른 패키지 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_6 {                                            // Ch2_6 클래스 정의 시작
    public static void main(String[] args) {                    // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);               // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        int number, ten, one, count = 0;                        // int형 변수 number, ten, one, count 선언 동시에 count에 0 대입하여 초기화, 사용자가 입력한 정수, 십의 자리 수, 일의 자리 수, 3, 6, 9 개수
        String result = "";                                     // String형 변수 result 선언 동시에 빈 문자열 "" 대입하여 초기화, 결과
 
        // 로직
        // 1. 정수 입력
        System.out.print("1~99 사이의 정수를 입력하시오>>");    // System.out.print() 메소드 호출하여 문자열 "1~99 사이의 정수를 입력하시오>>" 출력, 입력 안내 메세지 출력
        number = scanner.nextInt();                            // 변수 number에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 사용자로 부터 정수 입력
 
        // 2. 십의 자리 수 및 일의 자리 수 추출
        ten = number / 10;                                     // 변수 ten에 number / 10 연산 결과 리턴 받아 대입하여 초기화, 십의 자리 수 추출
        one = number % 10;                                     // 변수 one에 number % 10 연산 결과 리턴 받아 대입하여 초기화, 일의 자리 수 추출
 
        // 3. 3, 6, 9 개수 세기
        if((ten == 3|| (ten == 6|| (ten == 9)) {           // 만약 ten에 저장된 값이 3 또는 6 또는 9면, 즉 십의 자리 수가 3 또는 6 또는 9면
            count++;                                           // count에 +1, 즉 3, 6, 9 개수 +1
        }
        if((one == 3|| (one == 6|| (one == 9)) {           // 만약 one에 저장된 값이 3 또는 6 또는 9면, 즉 일의 자리 수가 3 또는 6 또는 9면
            count++;                                           // count에 +1, 즉 3, 6, 9 개수 +1
        }
 
        // 4. 결과 출력
        if (count == 1) {                                       // 만약 count에 저장된 값이 1이면, 즉 3, 6, 9 개수가 1개이면
            result = "박수짝";                                  // result에 문자열 "박수짝" 대입
        } else if (count == 2) {                                // 그렇지 않고 만약 count에 저장된 값이 2이면, 즉 3, 6, 9 개수가 2개이면
            result = "박수짝짝";                                // result에 문자열 "박수짝짝" 대입
        }
 
        System.out.println(result);                             // System.out.println() 메소드 호출하여 result에 저장된 값 출력, 즉 판별 결과 출력
 
        scanner.close();                                        // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                           // main() 메소드 정의 끝
}                                                               // Ch2_6 클래스 정의 끝
cs

 

7번

 

답: 

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
import java.util.Scanner;                                       // 다른 패키지의 클래스를 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_7 {                                            // Ch2_7 클래스 정의 시작
    public static void main(String[] args) {                    // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);               // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        int x1 = 100, y1 = 100, x2 = 200, y2 = 200;             // int형 변수 x1, y1, x2, y2 선언 동시에 100, 100, 200, 200 대입하여 초기화, 직사각형의 두 모서리 점 좌표
        int x, y;                                               // int형 변수 x, y 선언, 사용자가 입력한 점의 좌표
        boolean isIn = false;                                   // boolean형 변수 isIn 선언, 직사각형 내외부 여부
 
        // 로직
        // 1. 판별할 점 좌표 입력
        System.out.print("점 (x,y)의 좌표를 입력하시오>>");      // System.out.print() 메소드 호출하여 문자열 "점 (x,y)의 좌표를 입력하시오>>" 출력, 점 좌표 입력 안내 메세지 출력
        x = scanner.nextInt();                                  // 변수 x에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, x 좌표 입력
        y = scanner.nextInt();                                  // 변수 y에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, y 좌표 입력
 
        // 2. 내외부 여부 판별
        if ((x1 <= x && x <= x2) && (y1 <= y && y <= y2)) {     // 만약 x에 저장된 값이 x1보다 크고 x2보다 작고, y에 저장된 값이 y1보다 크고 y2보다 작으면, 즉 사용자가 입력한 점의 x,y 좌표가 직사각형 내부에 있으면
            isIn = true;                                        // isIn에 true 대입, 즉 사용자가 입력한 점은 직사각형 내부에 있다고 판별
        }
 
        // 3. 판별 결과 출력
        System.out.println("(" + x + "," + y + ")은 사각형 " + (isIn ? "안":"밖"+ "에 있습니다.");   // System.out.println() 메소드 호출하여 문자열 "(" + x + "," + y + ")은 사각형 " + (isIn ? "안":"밖") + "에 있습니다." 출력, 즉 직사각형 내외부 판별 결과 출력
 
        scanner.close();                                        // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                           // main() 메소드 정의 끝
}                                                               // Ch2_7 클래스 정의 끝
cs

 

// 점이 직사각형 안에 있다면, 점의 x좌표와 y좌표가 모두 직사각형의 범위 안에 있어야 한다. 그러므로 if문의 조건식에 && and 연산자를 사용하였다.

 

// x 좌표만 범위 안에 있고, y좌표는 범위 밖에 있는 경우

 

// 즉, x 좌표나 y좌표 둘 중 하나만 직사각형의 범위 안에 있는 경우는 점이 직사각형의 밖에 있을 수도 있기 때문이다.

 

8번

 

답: 

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
31
32
33
import java.util.Scanner;
 
public class Ch2_8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int x1, y1, x2, y2;                                                             // 사용자로부터 입력 받은 사각형의 두 점의 좌표
        int rectangleX1 = 100, rectangleY1 = 100, rectangleX2 = 200, rectangleY2 = 200// 충돌 판단할 직사각형의 두 점의 좌표
        boolean isConflicted;
 
        // 로직
        // 1. 충돌 판단할 직사각형의 두 점 좌표 입력
        System.out.print("점 (x1, y1), (x2, y2)를 입력하시오>> ");
        x1 = sc.nextInt();
        y1 = sc.nextInt();
        x2 = sc.nextInt();
        y2 = sc.nextInt();
 
        // 2. 충돌 판단
        // 입력 받은 사각형의 두 점의
        // 1. x좌표가 모두 사각형의 왼쪽에 있거나 2. 오른쪽에 있거나 3. y좌표가 모두 사각형의 아래쪽에 있거나 4. 위쪽에 있거나
        if((x1 < rectangleX1 && x2 < rectangleX1) || (x1 > rectangleX2 && x2 > rectangleX2) || (y1 < rectangleY1 && y2 < rectangleY1) || (y1 > rectangleY2 && y2 > rectangleY2))
            isConflicted = false;
        else
            isConflicted = true;
 
        // 3. 결과 출력
        System.out.println(isConflicted ? "충돌합니다." : "충돌 하지 않습니다.");
 
        sc.close();
    }
}
cs

 

// 컴퓨터에서의 좌표평면은 수학에서 사용하는 좌표평면과 같이 오른쪽으로 가면 x가 커지고, 위쪽으로 가면 y가 커지는 것이 아니라, 오른쪽으로 가면 x가 커지고, 아래쪽으로 가야 y가 커진다.

 

// 두 사각형이 충돌하지 않으려면, 단순히 두 점이 사각형 외부에 있는 것으로 판단하면 안된다.

 

// 아래와 같이 두 점이 사각형 (100, 100) (200, 200) 의 외부에 있어도 충돌하는 경우가 발생할 수 있다.

 

// 그러므로 아래와 같은 경우에는 두 사각형이 충돌하지 않는다로 판단할 수 있다.

 

// 입력 받은 사각형의 두 점의

// 1. x좌표가 모두 사각형의 왼쪽에 있거나 2. 오른쪽에 있거나

// 3. y좌표가 모두 사각형의 아래쪽에 있거나 4. 위쪽에 있거나

9번

 

답: 

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
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Scanner;                                   // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_9 {                                        // Ch2_9 클래스 정의 시작
    public static void main(String[] args) {                // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);           // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        double ox, oy, radius;                              // double형 변수 ox, oy, radius 선언, 원의 중심의 x, y 좌표 및 반지름
        double x, y;                                        // double형 변수 x, y 선언, 내외부 판별할 점의 x, y 좌표
        double distance;                                    // double형 변수 distance 선언, 원의 중심과 판별한 점 사이의 거리의 제곱
        boolean isIn;                                       // boolean형 변수 isIn 선언, 원 내외부 판별 여부
 
        // 로직
        // 1. 원의 중심 좌표 및 반지름 입력
        System.out.print("원의 중심과 반지름 입력>>");       // System.out.print() 메소드 호출하여 문자열 "원의 중심과 반지름 입력>>" 출력, 원의 중심과 반지름 입력 안내 메세지 출력
        ox = scanner.nextDouble();                          // 변수 ox에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원 중심의 x 좌표
        oy = scanner.nextDouble();                          // 변수 oy에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원 중심의 y 좌표
        radius = scanner.nextDouble();                      // 변수 radius에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원의 반지름
 
        // 2. 한 점의 좌표 입력
        System.out.print("점 입력>>");                       // System.out.print() 메소드 호출하여 문자열 "점 입력>>" 출력, 점 입력 안내 메세지 출력
        x = scanner.nextDouble();                           // 변수 x에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, x 좌표
        y = scanner.nextDouble();                           // 변수 y에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, y 좌표
 
        // 3. 두 점 사이의 거리의 제곱 계산
        distance = Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));                     // 변수 distance에 Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)) 연산 결과 리턴 받아 대입하여 초기화, 원의 중심과 한 점 사이의 거리의
 
        // 4. 점 내외부 판별
        if(distance <= radius) {                            // 만약 distance에 저장된 값이 radius 보다 작거나 같으면, 즉 원의 중심과 한 점 사이의 거리가 원의 반지름보다 작거나 같으면
            isIn = true;                                    // isIn에 true 대입, 즉 점은 원 내부에 있다
        }
        else {
            isIn  = false;
        }
 
        // 5. 판별 결과 출력
        System.out.println("점 (" + x + ", " + y + ")는 원 " + (isIn?"안":"밖"+ "에 있다."); // System.out.println() 메소드 호출하여 문자열 "점 (" + x + ", " + y + ")는 원 " + (isIn?"안":"밖") + "에 있다." 출력, 즉 내외부 판별 결과 출력
 
        scanner.close();                                    // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                       // main() 메소드 정의 끝
}                                                           // Ch2_9 클래스 정의 끝
 
cs

 

10번

 

답: 

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
31
32
33
34
35
36
37
38
39
40
import java.util.Scanner;                                       // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_10 {                                           // Ch2_10 클래스 정의 시작
    public static void main(String[] args) {                    // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);               // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        int ox1, oy1, radius1, ox2, oy2, radius2;               // int형 변수 ox1, oy1, radius1, ox2, oy2, radius2 선언, 즉 원 2개의 중심의 x, y 좌표, 반지름
        double distance;                                        // int형 변수 distance 선언, 즉 두 원의 중심 사이의 거리
        boolean isOverlap;                                      // boolean형 변수 isOverlap 선언 동시에 false 대입하여 초기화, 즉 두 원의 겹침 여부
 
        // 로직
        // 1. 첫번째 원 입력
        System.out.print("첫번째 원의 중심과 반지름 입력>>");    // System.out.print() 메소드 호출하여 문자열 "첫번째 원의 중심과 반지름 입력>>" 출력, 첫번째 원의 중심과 반지름 입력 안내 메세지 출력
        ox1 = scanner.nextInt();                                // 변수 ox1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원 중심의 x 좌표
        oy1 = scanner.nextInt();                                // 변수 oy1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원 중심의 y 좌표
        radius1 = scanner.nextInt();                            // 변수 radius1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원의 반지름
        // 2. 두번째 원 입력
        System.out.print("두번째 원의 중심과 반지름 입력>>");    // System.out.print() 메소드 호출하여 문자열 "두번째 원의 중심과 반지름 입력>>" 출력, 두번째 원의 중심과 반지름 입력 안내 메세지 출력
        ox2 = scanner.nextInt();                                // 변수 ox2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원 중심의 x 좌표
        oy2 = scanner.nextInt();                                // 변수 oy2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원 중심의 y 좌표
        radius2 = scanner.nextInt();                            // 변수 radius2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원의 반지름
        
        // 3. 두 원의 중심 사이의 거리 계산
        distance = Math.sqrt((ox1 - ox2) * (ox1 - ox2) + (oy1 - oy2) * (oy1 - oy2)); // distance에 Math.sqrt((ox1 - ox2) * (ox1 - ox2) + (oy1 - oy2) * (oy1 - oy2))에 연산 결과 리턴 받아 대입하여 초기화, 두 원의 중심 사이의 거리
        
        // 4. 겹치는지 판별
        if (distance < radius1 + radius2) {                    // 만약 distance에 저장된 값이 radius1 + radius2 보다 작거나 같으면, 즉 두 원의 중심 사이의 거리가 두 원의 반지름의 합보다 작으면
            isOverlap = true;                                  // isOverlap에 true 대입, 즉 두 원은 서로 겹침
        }
        else {
            isOverlap = false;                                 // isOverlap에 false 대입, 즉 두 원은 서로 겹침
        }
        
        // 5. 결과 출력
        System.out.println("두 원은 서로 " + (isOverlap ? "겹친다.":"겹치지 않는다."));   // System.out.println() 메소드 호출하여 문자열 "두 원은 서로 " + (isOverlap ? "겹친다.":"겹치지 않는다.") 출력, 즉 두 원 겹침 판별 여부 결과 출력
 
        scanner.close();                                        // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                           // main() 메소드 정의 끝
}                                                               // Ch2_10 클래스 정의 끝
cs

 

// 두 원의 중심 사이의 거리가 두 원의 반지름의 합보다 작으면 두 원은 서로 겹친다.

 

11번

 

(1) 답:

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
31
32
33
34
35
36
37
import java.util.Scanner;
 
public class Ch2_11_1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int month;
        String season;
 
        // 1. 달 입력
        System.out.print("달을 입력하세요(1~12)>>");
        month = sc.nextInt();
 
        // 2. 계절 판단
        if(month == 3 || month == 4 || month == 5) {
            season = "봄";
        }
        else if(month == 6 || month == 7 || month == 8) {
            season = "여름";
        }
        else if(month == 9 || month == 10 || month == 11) {
            season = "가을";
        }
        else if(month == 12 || month == 1 || month == 2) {
            season = "겨울";
        }
        else {
            season = "잘못입력";
        }
 
        // 3. 출력
        System.out.println(season);
 
        sc.close();
    }
}
cs

 

(2) 답:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
 
public class Ch2_11_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int month;
        String season;
 
        // 1. 입력
        System.out.print("달을 입력하세요(1~12)>>");
        month = sc.nextInt();
 
        // 2. 계절 판단
        switch(month) {
            case 3:
            case 4:
            case 5:
                season = "봄";
                break;
            case 6:
            case 7:
            case 8:
                season = "여름";
                break;
            case 9:
            case 10:
            case 11:
                season = "가을";
                break;
            case 12:
            case 1:
            case 2:
                season = "겨울";
                break;
            default:
                season = "잘못입력";
        }
 
        // 3. 출력
        System.out.println(season);
 
        sc.close();
    }
}
cs

 

 

12번

 

(1) 답: 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Scanner;                                   // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_12_1 {                                     // Ch2_12_1 클래스 정의 시작
    public static void main(String[] args) {                // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);           // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        double number1, number2, result;                    // double형 변수 number1, number2, result 선언, 즉 피연산자 2개와 결과값
        String operator;                                    // String형 변수 operator 선언
 
        // 로직
        // 1. 연산 입력
        System.out.print("연산>>");                         // System.out.print() 메소드 호출하여 문자열 "연산>>" 출력, 연산 입력 안내 메세지 출력
        number1 = scanner.nextDouble();                     // 변수 number1에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
        operator = scanner.next();                          // 변수 operator에 scanner 객체의 next() 메소드 호출하여 사용자로부터 입력 받은 값 String형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 연산자 입력
        number2 = scanner.nextDouble();                     // 변수 number2에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
 
        // 2. 연산 종류 판별 및 계산
        if(operator.equals("+"== true) {                  // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "+"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 +이면
            result = number1 + number2;                     // 변수 result에 number1 + number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
        }
        else if(operator.equals("-"== true) {             // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "-"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 -이면
            result = number1 - number2;                     // 변수 result에 number1 - number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
        }
        else if(operator.equals("*"== true) {             // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "*"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 *이면
            result = number1 * number2;                     // 변수 result에 number1 * number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
        }
        else if(operator.equals("/"== true) {             // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "/"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 /이면
            if (number2 == 0) {                             // 만약 number2에 저장된 값이 0이면, 즉 사용자가 0으로 나누려고 하면
                System.out.println("0으로 나눌 수 없습니다."); // System.out.println() 메소드 호출하여 문자열 "0으로 나눌 수 없습니다." 출력, 즉 0으로 나눌 수 없음 안내 메세지 출력
                return;                                     // 프로그램 종료
            }
            else {                                         // 그렇지 않으면, 즉 사용자가 0이 아닌 수로 나누려고 하면
                result = number1 / number2;                 // 변수 result에 number1 / number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
            }
        }
        else {                                              // 그렇지 않으면, 즉 사용자가 입력한 연산 종류가 +, -, *, /가 아니면
            System.out.println("해당 연산은 할 수 없습니다.");  // System.out.println() 메소드 호출하여 문자열 "해당 연산은 할 수 없습니다." 출력, 즉 연산 불가 안내 메세지 출력
            return;                                         // 프로그램 종료
        }
 
        // 3. 결과 출력
        System.out.println(number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result);   // System.out.println() 메소드 호출하여 문자열 number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result 출력, 즉 연산 결과 메세지 출력
 
        scanner.close();                                    // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                       // main() 메소드 정의 끝
}                                                           // Ch2_12_1 클래스 정의 끝
cs

 

(2) 답: 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Scanner;                                   // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
 
public class Ch2_12_2 {                                     // Ch2_12_2 클래스 정의 시작
    public static void main(String[] args) {                // main() 메소드 정의 시작
        Scanner scanner = new Scanner(System.in);           // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
 
        // 변수 및 상수 선언
        double number1, number2, result;                    // double형 변수 number1, number2, result 선언, 즉 피연산자 2개와 결과값
        String operator;                                    // String형 변수 operator 선언
 
        // 로직
        // 1. 연산 입력
        System.out.print("연산>>");                         // System.out.print() 메소드 호출하여 문자열 "연산>>" 출력, 연산 입력 안내 메세지 출력
        number1 = scanner.nextDouble();                     // 변수 number1에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
        operator = scanner.next();                          // 변수 operator에 scanner 객체의 next() 메소드 호출하여 사용자로부터 입력 받은 값 String형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 연산자 입력
        number2 = scanner.nextDouble();                     // 변수 number2에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
        // 2. 연산 종류 판별 및 계산
        switch(operator) {                                  // 변수 operator에 저장된 값이
            case "+":                                       // 문자열 "+"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 +이면
                result = number1 + number2;                 // 변수 result에 number1 + number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
                break;                                      // switch문 빠져나감
            case "-":                                       // 문자열 "-"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 -이면
                result = number1 - number2;                 // 변수 result에 number1 - number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
                break;                                      // switch문 빠져나감
            case "*":                                       // 문자열 "*"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 *이면
                result = number1 * number2;                 // 변수 result에 number1 * number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
                break;                                      // switch문 빠져나감
            case "/":                                       // 문자열 "/"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 /이면
                if (number2 == 0) {                         // 만약 변수 number2에 저장된 값이 0이면, 즉 사용자가 0으로 나누려고 하면
                    System.out.println("0으로 나눌 수 없습니다.");// System.out.println() 메소드 호출하여 문자열 "0으로 나눌 수 없습니다." 출력, 즉 0으로 나눌 수 없음 안내 메세지 출력
                    return;                                 // 프로그램 종료
                }
                else {                                      // 그렇지 않으면, 즉 사용자가 0이 아닌 수로 나누려고 하면
                    result = number1 / number2;             // 변수 result에 number1 / number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
                    break;                                  // switch문 빠져나감
                }
            default:                                        // 어떤 경우에도 해당되지 않으면
                System.out.println("해당 연산은 할 수 없습니다.");// System.out.println() 메소드 호출하여 문자열 "해당 연산은 할 수 없습니다.", 즉 연산 불가 안내 메세지 출력
                return;                                     // 프로그램 종료
        }
 
        // 3. 결과 출력
        System.out.println(number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result);   // System.out.println() 메소드 호출하여 문자열 number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result 출력, 즉 연산 결과 메세지 출력
 
        scanner.close();                                     // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
    }                                                        // main() 메소드 정의 끝
}                                                            // Ch2_12_2 클래스 정의 끝
cs

 

728x90