[명품 JAVA Programming] 제2장 자바 기본 프로그래밍 - 실습문제
[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);
}
}
}
실행 결과