[명품 JAVA Programming] chapter02 실습문제
1. 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라. $1 = 1100원으로 가정하고 계산한다.
import java.util.Scanner;
public class practice1 {
public double wontodollar(int won) {
return won * 1/1100;
}
public static void main(String args[]){
System.out.print("원화를 입력하세요(단위 원) >> ");
Scanner scanner = new Scanner(System.in);
int won = scanner.nextInt();
practice1 p1 = new practice1();
double dollar = p1.wontodollar(won);
System.out.print(won + "원은 $" + dollar + "입니다.");
scanner.close();
}
}
-> 1원 = $1/1100이므로 원 단위에 1/1100을 곱해준다.
2. 2자리의 정수(10~99사이)를 입력받고, 십의 자리와 1의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class practice2 {
public boolean equal(int num){
if((num / 10) == (num % 10)){
return true;
}else{
return false;
}
}
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
System.out.print("2자리수 정수 입력(10~99) >> ");
int num = scanner.nextInt();
practice2 p2 = new practice2();
boolean dis = p2.equal(num);
if(dis){
System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
}else{
System.out.println("No! 10의 자리와 1의 자리가 같지 않습니다.");
}
scanner.close();
}
}
-> num을 10으로 나눈 몫(십의 자리)와 num을 10으로 나눈 후 나머지(1의 자리)가 같은지 같지 않은지 판별.
3. 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 10원짜리 동전, 1원짜리 동전
각 몇 개로 변환되는지 출력하라.
import java.util.Scanner;
public class practice3 {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
System.out.print("금액을 입력하시오 >>> ");
int money = scanner.nextInt();
int oman = money / 50000;
int man = money % 50000 / 10000;
int cheon = money % 10000 / 1000;
int back = money % 1000 /100;
int oship = money % 100 / 50;
int ship = money % 50 / 10;
int ill = money % 10;
System.out.println("오만원권 " + oman + "매");
System.out.println("만원권 " + man + "매");
System.out.println("천원권 " + cheon + "매");
System.out.println("백원 " + back + "개");
System.out.println("오십원 " + oship + "개");
System.out.println("십원 " + ship + "개");
System.out.println("일원 " + ill + "개");
scanner.close();
}
}
-> 금액을 입력받고, 금액을 큰 화폐단위로 나눈다. 그 몫을 각 화폐단위에 저장한다.
나눈 다음, 금액을 나눈 화폐단위로 나누어 나머지를 구한 후 금액을 갱신한다. 그후, 10단위까지 앞의 과정 반복.
4. 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의하라.
import java.util.Scanner;
public class practice4 {
public int midnum(int num1, int num2, int num3){
int mid;
if((num1 > num2 && num2 > num3) || (num1 < num2 && num2 < num3)){
mid = num2;
}else if((num1 > num2 && num1 < num3) || (num2 > num1 && num1 > num3)){
mid = num1;
}else{
mid = num3;
}
return mid;
}
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();
practice4 p4 = new practice4();
int midnum = p4.midnum(num1, num2, num3);
System.out.println("중간값은 " + midnum);
scanner.close();
}
}
-> 비교를 통해 중간값 산출
5. 삼각형의 변의 길이를 나타내는 정수 3개를 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라.
삼각형이 되려면 두 변의 합이 다른 한 변의 합보다 커야한다.
import java.util.Scanner;
public class practice5 {
public static void main(String args[]){
System.out.print("정수 3개를 입력하시오 >> ");
Scanner scanner = new Scanner(System.in);
int n1 = scanner.nextInt();
int n2 = scanner.nextInt();
int n3 = scanner.nextInt();
if((n1 + n2 > n3) || (n1 + n3 > n2) || (n2 + n3 > n1)){
System.out.println("삼각형이 됩니다.");
}else{
System.out.println("삼각형이 되지 못합니다.");
}
scanner.close();
}
}
-> 비교문을 통해 각 두 변의 합이 다른 한 변의 합보다 큰지 판별
6. 369 게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개
있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class practice6 {
public void num369(int num){
int first = num / 10;
int second = num % 10;
if((first % 3 == 0) || (second % 3 == 0)){
System.out.println("박수짝");
}else if((first % 3 == 0) && (second % 3 == 0)){
System.out.println("박수짝짝");
}
}
public static void main(String args[]){
System.out.print("1~99 사이의 정수를 입력하시오 >> ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
practice6 p6 = new practice6();
p6.num369(num);
sc.close();
}
}
-> 십의 자리(num / 10)와 일의 자리(num % 10)을 구해서 십의 자리와 일의 자리가 각각 같은지 비교해서 다르게 출력.
7. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다.
(100, 100)과 (200, 200)의 두 점으로 이루어진 사각형이 있을 때, 정수 x, y 값을 입력받고 점(x, y)가 이 직사각형 안에 있는지
판변하는 프로그램을 작성하라.
import java.util.Scanner;
public class practice7 {
public void rect(int x, int y){
if(x <= 200 && x >= 100 && y >= 100 && y <= 200){
System.out.println(String.format("(%d, %d)는 사각형 안에 있습니다.", x, y));
}
}
public static void main(String args[]){
System.out.print("점 (x, y)의 좌표를 입력하시오 >> ");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
practice7 p7 = new practice7();
p7.rect(x, y);
sc.close();
}
}
-> 100 <= x <= 200, 100 <= y <= 200 이 두 조건을 동시에 만족하는지 체크한다.
8. 직사각형을 구성하는 두 점 (x1, y1), (x2, y2)을 입력받아 (100, 100), (200, 200)의 두 점으로 이루어진
직사각형과 충돌하는지 판별하는 프로그램을 작성하라.
import java.util.Scanner;
public class practice8 {
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[]){
System.out.print("(x1, y1), (x2, y2)를 입력하시오 >> ");
Scanner sc = new Scanner(System.in);
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
boolean isInRect = inRect(100, 200, x1, y1, x2, y2);
if(isInRect){
System.out.println(String.format("(%d, %d), (%d, %d)는 (100, 100), (200, 200) 직사사각형과 충돌합니다.", x1, y1, x2, y2));
}else{
System.out.println(String.format("(%d, %d), (%d, %d)는 (100, 100), (200, 200) 직사사각형과 충돌하지 않습니다.", x1, y1, x2, y2));
}
}
}
-> 100이 입력한 x1과 x2 내부에 있는지, 200이 입력한 x2, y2 내부에 있는지 판단.
9. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점 (x, y)를 입력받아
이 점이 원의 내부에 있는지 판변하려 출력하라.
import java.util.Scanner;
public class practice9 {
public void inCircle(int x, int y, int circleX, int circleY, double circleR){
double distance = Math.sqrt((circleX - x) * (circleX - x) + (circleY - y) * (circleY - y));
if(distance <= circleR){
System.out.println(String.format("점 (%d, %d)는 원 안에 있다.", x, y));
}else{
System.out.println(String.format("점 (%d, %d)는 원 안에 없다.", x, y));
}
}
public static void main(String args[]){
System.out.print("원의 중심과 반지름 입력 >> ");
Scanner sc = new Scanner(System.in);
int circle_x = sc.nextInt();
int circle_y = sc.nextInt();
double radius = sc.nextDouble();
System.out.print("점 입력 >> ");
int x = sc.nextInt();
int y = sc.nextInt();
practice9 p9 = new practice9();
p9.inCircle(x, y, circle_x, circle_y, radius);
}
}
-> 원의 중심과 점 사이의 거리가 원의 반지름보다 크면 원 밖에 있는 것이고 같거나 작으면 점은 원 안에 있다는 뜻이다.
10. 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하려 출력하라.
import java.util.Scanner;
public class practive10 {
public static boolean Circle(int c1x, int c1y, double c1r, int c2x, int c2y, double c2r){
double distance = Math.sqrt((c1x - c2x) * (c1x - c2x) + (c1y - c2y) * (c1y - c2y));
if ((c2r + c1r) >= distance){
return true;
}else{
return false;
}
}
public static void main(String args[]){
System.out.print("첫번째 원의 중심과 반지름 입력 >> ");
Scanner sc = new Scanner(System.in);
int c1x = sc.nextInt();
int c1y = sc.nextInt();
double c1r = sc.nextInt();
System.out.print("두번째 원의 중심과 반지름 입력 >> ");
int c2x = sc.nextInt();
int c2y = sc.nextInt();
double c2r = sc.nextInt();
boolean circle = Circle(c1x, c1y, c1r, c2x, c2y, c2r);
if(circle){
System.out.println("두 원은 서로 겹친다.");
}else{
System.out.println("두 원은 겹치지 않는다.");
}
sc.close();
}
}
-> 원의 중심들 사이의 거리를 구한 후, 두 원의 반지름을 더한 값과 같거나 크면 원은 겹친다.
그렇지 않으면 겹치지 않는다.
11. 숫자를 입력받아 3~5는 "봄", 6~8은 "여름", 9~11은 "가을". 12, 1, 2의 경우엔 "겨울"을, 그 외의 숫자를 입력한 경우
"잘못입력"을 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class practice11 {
public static void main(String[] args) {
System.out.print("답을 입력하세요(1~12) >> ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if(num >= 3 && num <= 5){
System.out.println("봄");
}else if(num >= 6 && num <= 8){
System.out.println("여름");
}else if(num >= 9 && num <= 11){
System.out.println("가을");
}else if(num == 1 || num == 2 || num == 12){
System.out.println("겨울");
}else{
System.out.println("잘못입력");
}
sc.close();
}
}
-> if-else 문 사용, switch 문도 가능.
12. 사칙 연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 +, -, *, /의 네 가지로 하고 피연산자는 모두 실수로 한다.
피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다.(next()사용) 0으로 나누기 시 "0으로 나눌 수 없습니다." 출력하고
종료한다.
import java.util.Scanner;
public class practice12 {
public static void calc(int num1, String s, int num2){
int result = 0;
switch(s){
case "+":
result = num1 + num2;
System.out.println(String.format("%d%s%d의 계산 결과는 %d", num1, s, num2, result));
break;
case "-":
result = num1 - num2;
System.out.println(String.format("%d%s%d의 계산 결과는 %d", num1, s, num2, result));
break;
case "*":
result = num1 * num2;
System.out.println(String.format("%d%s%d의 계산 결과는 %d", num1, s, num2, result));
break;
case "/":
if(num2 == 0){
System.out.println("0으로 나눌 수 없습니다.");
}
result = num1 / num2;
System.out.println(String.format("%d%s%d의 계산 결과는 %d", num1, s, num2, result));
break;
default:
System.out.println("연산자를 잘못 입력했습니다.");
}
}
public static void main(String[] args) {
System.out.print("연산 >> ");
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
String s = sc.next();
int num2 = sc.nextInt();
calc(num1, s, num2);
sc.close();
}
}