본문 바로가기
IT에 관한 팁, 소개

4판 명품 자바 프로그래밍 2장 실습문제 풀이 (일부만)

by 레피스토 2024. 10. 7.
반응형

4. 같은 값의 숫자가 나올경우를 고려

import java.util.Scanner;

public class App {

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

		System.out.print("정수 3개 입력>>");
		int num1 = scanner.nextInt();
		int num2 = scanner.nextInt();
		int num3 = scanner.nextInt();
		
		int middle;
		if(num1>=num2 && num1<=num3 || num1>=num3 && num1<=num2)
			middle = num1;
		else if(num2>=num1 && num2<=num3 || num2>=num3 && num2<=num1)
			middle = num2;
		else
			middle = num3;
		
		System.out.println("중간 값은 "+ middle);
		scanner.close();

	}

}

5. 배열에 3개의 변의 길이를 넣고, 오름차순으로 정렬하여 index 2에 max가 오게끔 한다.

import java.util.Scanner;

public class App {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("정수 3개를 입력하시오>>");

		int sideArray[] = new int[3];
		for(int i =0;i<sideArray.length;i++) {
			sideArray[i] = scanner.nextInt();
		}
		java.util.Arrays.sort(sideArray);
		
		int sumOf2Sides = sideArray[0] + sideArray[1];
		if(sumOf2Sides>sideArray[2])
			System.out.println("삼각형이 됩니다.");
		else
			System.out.println("삼각형이 안됩니다.");
		
		
		
		
		
		
		scanner.close();

	}

}

6. 십의 자리와 일의 자리가 각각 0이 아니면서 3의 배수인지 체크해서 맞으면 clapCount를 1증가시킨다.

import java.util.Scanner;

public class App {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("1~99 사이의 정수를 입력하시오>>");
		int num = scanner.nextInt();
			
		
		if (num>99 || num<1)
			System.out.println("정수가 1~99 사이에 있지 않습니다.");
		else {
			int digitNumberOf10 = num/10;
			int digitNumberOf1 = num % 10;
			int clapCount = 0;
			
			if(digitNumberOf10 != 0 && digitNumberOf10 % 3 == 0)
				clapCount++;
			if(digitNumberOf1 != 0 && digitNumberOf1 %3 == 0)
				clapCount++;
			
			if(clapCount == 2)
				System.out.println("박수짝짝");
			else if (clapCount == 1)
				System.out.println("박수짝");
			else
				System.out.println();
			
		}
	
		scanner.close();

	}

}

8. 두 직사각형이 겹치는 경우는 큰 직사각형에 작은 직사각형이 포함될때도 포함한다. 넓이가 공유되는 경우(색칠된 부분)은 직사각형이 겹치는 것이다.

import java.util.Scanner;

public class App {
	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;
	}

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

		System.out.print("직사각형의 왼쪽 아래 점 (x1,y1)과 직사각형의 오른쪽 위 점 (x2,y2)의 좌표를 입력하시오\n");
		System.out.print("Point1>>");
		int x1 = scanner.nextInt();
		int y1 = scanner.nextInt();
		System.out.print("Point2>>");
		int x2 = scanner.nextInt();
		int y2 = scanner.nextInt();

		if (inRect(x1, y1, 100, 100, 200, 200) || inRect(x2, y2, 100, 100, 200, 200))
			System.out.println("(100,100), (200,200)의 직사각형과 충돌합니다.");
		else
			System.out.println("(100,100), (200,200)의 직사각형과 충돌하지 않습니다.");

		scanner.close();

	}

}

10. 두 원이 서로 겹치는 경우: 두 원의 중심 사이의 거리 =  d , 두 반지름의 합 rSum, 두 반지름의 차 = rDiff라 하면

rDiff <= d <= rSum인 경우이다. 원을 큰 원과 작은 원 2개를 그려서 안에서 접하는 경우, 바깥에서 접하는 경우를 그림으로 그려보면 이해하기 편하다. (아래 코드와 달리, 원의 내부를 색칠된걸로 가정하면, d <= rSum의 경우만 생각하면 된다.)

import java.util.Scanner;

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

		System.out.print("첫번째 원의 중심과 반지름 입력>>");
		double x1 = scanner.nextDouble();
		double y1 = scanner.nextDouble();
		double radius1 = scanner.nextDouble();
		
		System.out.print("두번째 원의 중심과 반지름 입력>>");
		double x2 = scanner.nextDouble();
		double y2 = scanner.nextDouble();
		double radius2 = scanner.nextDouble();
		
		double distance = Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2,2));
		
		double radiusDiff = Math.abs(radius1 - radius2);
		
		double radiusSum = radius1 + radius2;
		
		if(distance>= radiusDiff && distance <= radiusSum )
			System.out.println("두 원은 서로 겹친다.");
		else
			System.out.println("두 원은  서로 겹치지 않는다.");
		scanner.close();

	}

}
반응형

댓글