명품 자바 프로그래밍 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 | 
'1. Java 자바 > 1_0. 책, 강의' 카테고리의 다른 글
| [명품 자바 프로그래밍] 3장 127쪽 체크 타임_정답 (0) | 2022.10.09 | 
|---|---|
| [명품 자바 프로그래밍] 2장 교재_실습 문제 정리 (0) | 2022.10.08 | 
| [명품 자바 프로그래밍] 2장 106쪽 오픈 챌린지_정답 (0) | 2022.10.05 | 
| [명품 자바 프로그래밍] 2장 교재_이론 문제 정리 (0) | 2022.10.05 | 
| [명품 자바 프로그래밍] 2장 107~109쪽 연습문제 이론문제_정답 (0) | 2022.06.04 |