YJ/JAVA

[명품 JAVA Programming] 제2장 자바 기본 프로그래밍 - 실습문제

Team DAON 2020. 12. 24. 02:16

[1번]

Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라.

$1 = 1100원으로 가정하고 게산하라.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("원화를 입력하세요(단위 원)>>");
	    int won = scanner.nextInt();//원화 int형 변수인 won에 입력 받기
	    double dollar = won/1100;//won에 저장된 값을 1100으로 나눈 몫을 double형 변수 dollar에 저장, 소수점까지 표기하기 위해 double 사용
	    System.out.println(won+"원은 $"+dollar+"입니다.");//형식에 맞게 출력
	}
}

 

실행 결과


 

[2번]

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

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("2자리수 정수 입력(10~99)>>");
	    int n = scanner.nextInt();//정수 입력 받기
	    int ten = n/10;//10의 자리 수 ten에 저장
	    int one = n%10;//1의 자리 수 one에 저장
	    
	    if(ten == one)//10의 자리와 1의 자리가 같은 경우
	    	System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
	    else //10의 자리와 1의 자리가 다른 경우
	    	System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
	}
}

 

실행 결과


[3번]

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

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("금액을 입력하시오>>");
	    int money = scanner.nextInt();//금액 입력 받기
	    
	    System.out.println("오만원권 "+money/50000+"매");//50000으로 나눈 몫 출력
	    money = money%50000;//오만원권을 제외한 금액 money에 저장
	    System.out.println("만원권 "+money/10000+"매");//10000으로 나눈 몫 출력
	    money = money%10000;//만원권을 제외한 금액 money에 저장
	    System.out.println("천원권 "+money/1000+"매");//1000으로 나눈 몫 출력
	    money = money%1000;//천원권을 제외한 금액 money에 저장
	    System.out.println("백원 "+money/100+"개");//100으로 나눈 몫 출력
	    money = money%100;//백원을 제외한 금액 money에 저장
	    System.out.println("오십원 "+money/50+"개");//50으로 나눈 몫 출력
	    money = money%50;//오십원을 제외한 금액 money에 저장
	    System.out.println("십원 "+money/10+"개");//10으로 나눈 몫 출력
	    money = money%10;//십원을 제외한 금액 money에 저장
	    System.out.println("일원 "+money+"개");//남은 일원 출력
	}
}

 

실행 결과


[4번]

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("정수 3개 입력>>");
	    int a = scanner.nextInt();//정수 입력 받기
	    int b = scanner.nextInt();
	    int c = scanner.nextInt();
	    
	    int middle = 0;//중간값을 저장할 변수 선언
	    
	    if((b<=a&&a<=c)||(c<=a&&a<=b)){//b<=a<=c거나 c<=a<=b인 경우
	    	middle = a;//중간값 a
	    }
	    else if((a<=b&&b<=c)||(c<=b&&b<=a)) {//a<=b<=c거나 c<=b<=a인 경우
	    	middle = b;//중간값 b
	    }
	    else if((a<=c&&c<=b)||(b<=c&&c<=a)) {//a<=c<=b거나 b<=c<=a인 경우
	    	middle = c;//중간값 c
	    }
	    
	    System.out.println("중간 값은 "+middle);//middle에 저장된 중간값 출력
	}
}

 

실행 결과


[5번]

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

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("정수 3개를 입력하시오>>");
	    int a = scanner.nextInt();//정수 입력 받기
	    int b = scanner.nextInt();
	    int c = scanner.nextInt();
	    
	   if((a+b>c)&&(a+c>b)&&(b+c>a)) {//두 변의 합이 다른 한 변보다 커야 한다는 조건 검사 
		   System.out.print("삼각형이 됩니다");//삼각형이 되는 경우
	   }
	   else {//삼각형이 되지 않는 경우
		   System.out.print("삼각형이 안 됩니다");
	   }
	}
}

 

실행 결과


[6번]

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("1~99 사이의 정수를 입력하시오>>");
	    int n = scanner.nextInt();//정수 입력 받기
	    
	    int ten = n/10;//정수의 십의 자리 수 ten에 저장
	    int one = n%10;//정수의 일의 자리 수 one에 저장
	    int result = 0;
	    if(ten == 3||ten == 6||ten == 9)//십의 자리 수가 369에 해당되는지 판단
	    	result++;//result 값 증가
	    if(one == 3||one == 6||one == 9)//일의 자리 수가 369에 해당되는지 판단
	    	result++;//result 값 증가
	    
	    if(result == 1) //십의 자리나 일의 자리 중 하나만 369에 해당되는 경우
	    	System.out.println("박수짝");
	    else if(result == 2)//십의 자리와 일의 자리 둘 다 369에 해당되는 경우
	    	System.out.println("박수짝짝");
	}
}

실행 결과


[7번]

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

 

→ 100<=x<=200이면서 100<=y<=200을 만족해야 한다.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("점 (x,y)의 좌표를 입력하시오>>");
	    int x = scanner.nextInt();//정수 입력 받기
	    int y = scanner.nextInt();
	    
	    if(100<=x&&x<=200) {//100<=x<=200인지 확인
	    	if(100<=y&&y<=200) {//100<=y<=200인지 확인
	    		System.out.println("("+x+", "+y+")는 사각형 안에 있습니다.");
	    	}
	    	else {//y가 조건을 만족하지 않는 경우
	    		System.out.println("("+x+", "+y+")는 사각형 안에 없습니다.");
	    	}
	    }
	    else {//x가 조건을 만족하지 않는 경우
	    	System.out.println("("+x+", "+y+")는 사각형 안에 없습니다.");
	    }
	}
}

 

실행 결과


[8번]

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

 

→ 100<=x1<=200이면서 100<=y1<=200을 만족하거나 100<=x2<=200이면서 100<=y2<=200을 만족해야 한다.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.print("점 (x1, y1), (x2, y2)의 좌표를 입력하시오>>");
	    int x1 = scanner.nextInt();//정수 입력 받기
	    int y1 = scanner.nextInt();
	    int x2 = scanner.nextInt();//정수 입력 받기
	    int y2 = scanner.nextInt();
	    //(x1, y1), (x2, y2)가 각각 (100,100),(200,200)안에 포함되는지 확인
	    if(((100<=x1&&x1<=200)&&(100<=y1&&y1<=200))||((100<=x2&&x2<=200)&&(100<=y2&&y2<=200))) {
	    	System.out.println("("+x1+", "+y1+"), ("+x2+", "+y2+")는 사각형 안에 있습니다.");
	    }
	    else {//조건을 만족하지 않는 경우
	    	System.out.println("("+x1+", "+y1+"), ("+x2+", "+y2+")는 사각형 안에 없습니다.");
	    }
	}
}

 

실행 결과

 


[9번]

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

 

→ 중심에서 원 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("원의 중심과 반지름 입력>>");//원의 중심과 반지름 입력 받기
	    double rx = scanner.nextDouble();
	    double ry = scanner.nextDouble();
	    double r = scanner.nextDouble();
	    System.out.println("점 입력>>");//점 입력 받기
	    double x = scanner.nextDouble();
	    double y = scanner.nextDouble();
	    
	    if(Math.sqrt((x-rx)*(x-rx)+(y-ry)*(y-ry))<=r) {//두 원이 서로 겹치는지 확인
	    	System.out.println("("+x+", "+y+")는 원 안에 있습니다.");
	    }
	    else {//조건을 만족하지 않는 경우
	    	System.out.println("("+x+", "+y+")는 원 안에 없습니다.");
	    }
	}
}

실행 결과


[10번]

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

 

→ 두 원의 중심 사이의 거리<= 두 반지름의 합인 경우 두 원은 겹친다. (만나는 것도 겹치는 거에 포함했다.)

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("첫번째 원의 중심과 반지름 입력>>");//원의 중심과 반지름 입력 받기
	    double x1 = scanner.nextDouble();
	    double y1 = scanner.nextDouble();
	    double r1 = scanner.nextDouble();
	    System.out.println("두번째 원의 중심과 반지름 입력>>");//원의 중심과 반지름 입력 받기
	    double x2 = scanner.nextDouble();
	    double y2 = scanner.nextDouble();
	    double r2 = scanner.nextDouble();
	    
	    //두 중심 사이의 거리
	    double cdistance = Math.sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
	    double rdistance = r1+r2;//반지름의 합
	    if(cdistance<=rdistance) {//두 원이 서로 겹치는지 확인
	    	System.out.println("두 원은 서로 겹친다.");
	    }
	    else {//조건을 만족하지 않는 경우
	    	System.out.println("두 원은 서로 겹치지 않는다.");
	    }
	}
}

실행 결과


[11번]

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

 

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("달을 입력하세요(1~12)>>");//달 입력받기
	    int month = scanner.nextInt();
	    
	    //다른 else if 문에서 아예 제외시키기 위해 유효하지 않은 범위를 우선 제거
	    if(month<1||month>12) {//달이 1보다 작은 값이거나 12보다 큰 값일 경우
	    	System.out.println("잘못입력");//범위를 벗어났으므로 잘못 입력 출력
	    }
	    else if(month<=2||month==12) {//1, 2, 12인 경우
	    	System.out.println("겨울");
	    }
	    else if(month<=5) {//3, 4, 5인 경우
	    	System.out.println("봄");
	    }
	    else if(month<=8) {// 6, 7, 8인 경우
	    	System.out.println("여름");
	    }
	    else {// 9, 10, 11인 경우
	    	System.out.println("가을");
	    }
	}
}

실행 결과

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("달을 입력하세요(1~12)>>");//달 입력받기
	    int month = scanner.nextInt();
	    
	    switch(month) {
	    	case 1://1월인 경우
	    	case 2://2월인 경우
	    		System.out.println("겨울");
	    		break;
	    	case 3://3월인 경우
	    	case 4://4월인 경우
	    	case 5://5월인 경우
	    		System.out.println("봄");
	    		break;
	    	case 6://6월인 경우
	    	case 7://7월인 경우
	    	case 8://8월인 경우
	    		System.out.println("여름");
	    		break;
	    	case 9://9월인 경우
	    	case 10://10월인 경우
	    	case 11://11월인 경우
	    		System.out.println("가을");
	    		break;
	    	case 12://12월인 경우
	    		System.out.println("겨울");
	    		break;
	    	default://범위 안에 속하지 않는 수를 입력한 경우
	    		System.out.println("잘못입력");
	    		break;
	    }
	}
}

실행 결과


[12번]

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

 

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("연산>>");//달 입력받기
	    double x = scanner.nextDouble();
	    String operator = scanner.next();
	    double y = scanner.nextInt();
	    double result = 0;
	    int count = 0;
	    if(operator.equals("+")) {//더하기인 경우
	    	result = x+y;
	    }
	    else if(operator.equals("-")) {//빼기인 경우
	    	result = x-y;
	    }
	    else if(operator.equals("*")) {//곱하기인 경우
	    	result = x*y;
	    }
	    else if(operator.equals("/")) {//나누기인 경우
	    	if(y == 0) {//0으로 나누기 시 문장 출력
	    		System.out.println("0으로 나눌 수 없습니다.");
	    		count = -1;//0으로 나눈 경우 표기
	    	}
	    	else {
	    		result = x/y;
	    	}
	    }
	    
	    if(count!=-1) {//0으로 나누기를 시도한 경우를 제외한 모든 값 == 계산 결과가 있는 경우
	    	System.out.println(x+operator+y+"의 계산 결과는 "+result);
	    }
	}
}

실행 결과

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("연산>>");//달 입력받기
	    double x = scanner.nextDouble();
	    String operator = scanner.next();
	    double y = scanner.nextInt();
	    double result = 0;
	    int count = 0;

	    switch(operator) {//연산자 구분을 위한 switch문
	    case "+"://더하기
	    	result = x+y;
	    	break;//switch문에서 벗어나기 위한 break문
	    case "-"://빼기
	    	result = x-y;
	    	break;
	    case "*"://곱하기
	    	result = x*y;
	    	break;
	    case "/"://나누기
	    	if(y == 0) {//0으로 나누는 경우 문장 출력
	    		System.out.println("0으로 나눌 수 없습니다.");
	    		count = -1;
	    	}
	    	else {
	    		result = x/y;
	    	}
	    }
	    
	    if(count!=-1) {//0으로 나누기를 시도한 경우를 제외한 모든 값 == 계산 결과가 있는 경우
	    	System.out.println(x+operator+y+"의 계산 결과는 "+result);
	    }
	}
}

실행 결과