1. Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라. $1=1100원으로 가정하고 계산하라.
원화를 입력하세요(단위 원)>>3300
3300원은 $3.0입니다.
import java.util.Scanner;
public class Chap02_01 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
System.out.print("원화를 입력하세요(단위 원)>>");
int won=scan.nextInt();
double dollar=won/1100;
System.out.println(won+"원은 $"+dollar+"입니다.");
scan.close();
}
}
2. Scanner 클래스를 이용하여 2자리 정수(10~99사이)를 입력받고, 십의 자리와 1의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.
2자리수 정수 입력(10~99)>>77
Yse! 10의 자리와 1의 자리가 같습니다.
import java.util.Scanner;
public class Chap02_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("2자리수 정수 입력(10~99)>>");
int num=scan.nextInt();
if ((num>=10)&&(num<=99)) {
int ten=num/10;
int one=num%10;
if (ten==one)
System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
else
System.out.println("No! 10의 자리와 1의 자리가 같지 않습니다.");
}
else
System.out.println("정수 범위 초과");
scan.close();
}
}
3. Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라.
금액을 입력하시오>>65376
오만원권 1매
만원권 1매
천원권 5매
백원 3개
오십원 1개
십원 2개
일원 6개
import java.util.Scanner;
public class Chap02_03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int num=0; //지폐, 동전의 개수
System.out.print("금액을 입력하시오>>");
int money=scan.nextInt();
num=money/50000;
money%=50000;
if (num!=0)
System.out.println("오만원권 "+num+"매");
num=money/10000;
money%=10000;
if (num!=0)
System.out.println("만원권 "+num+"매");
num=money/1000;
money%=1000;
if (num!=0)
System.out.println("천원권 "+num+"매");
num=money/500;
money%=500;
if (num!=0)
System.out.println("오백원권 "+num+"매");
num=money/100;
money%=100;
if (num!=0)
System.out.println("백원권 "+num+"개");
num=money/50;
money%=50;
if (num!=0)
System.out.println("오십원 "+num+"개");
num=money/10;
money%=10;
if (num!=0)
System.out.println("십원 "+num+"개");
num=money/1;
money%=1;
if (num!=0)
System.out.println("일원 "+num+"개");
}
}
출력 예에서 보면 개수가 0개인 지폐나 동전은 출력하지 않는다.
그래서 if (num!=0)을 추가해서 개수가 0이면 출력하지 않게 했다.
4. Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의하라.
정수 3개 입력>>20 100 33
중간 값은 33
import java.util.Scanner;
public class Chap02_04 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
int medium=0;
System.out.print("정수 3개 입력>>");
int num1=scan.nextInt();
int num2=scan.nextInt();
int num3=scan.nextInt();
if (num1<=num2) { //먼저 num1과 num2 비교
if(num1>num3) //num3<num1<=num2
medium=num1;
else {
if(num2<=num3) //num1<=num2<=num3
medium=num2;
else //num1<=num3<num2
medium=num3;
}
}
else {
if(num1<=num3) //num2<num1<=num3
medium=num1;
else {
if(num2<=num3) //num2<=num3<num1
medium=num3;
else //num3<num2<num1
medium=num2;
}
}
System.out.println("중간 값은 "+medium);
scan.close();
}
}
5. Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라. 삼각형이 되려면 두 변의 합이 다른 한 변의 합보다 커야 한다.
정수 3개를 입력하시오>>4 3 5
삼각형이 됩니다
import java.util.Scanner;
public class Chap02_05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("정수 3개를 입력하시오>>");
int num1=scan.nextInt();
int num2=scan.nextInt();
int num3=scan.nextInt();
if ((num1<num2+num3)&&(num2<num1+num3)&&(num3<num1+num2))
System.out.println("삼각형이 됩니다");
else
System.out.println("삼각형이 안됩니다");
scan.close();
}
}
원래 삼각형은 가장 긴 변만 다른 두 변의 합보다 작은 것을 확인하면 삼각형이 된다.
하지만 가장 긴 변을 구하는 것은 또 별도의 시간이 걸릴 것이고 문제에서도 가장 긴 변만 확인하라는 말이 없어서 모든 변이 성립하는지 확인해줬다.
6. 369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를 들면, 키보드로 입력된 수가 13인 경우 "박수짝"을, 36인 경우 "박수짝짝"을 출력하면 된다.
1~99 사이의 정수를 입력하시오>>36
박수짝짝
import java.util.Scanner;
public class Chap02_06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int sum=0;
System.out.print("1~99 사이의 정수를 입력하시오>>");
int num=scan.nextInt();
if((num>=1)&&(num<=99)) { //범위 확인
int ten=num/10;
int one=num%10;
if((ten==3)||(ten==6)||(ten==9)) //십의 자리수 확인
sum++;
if((one==3)||(one==6)||(one==9)) //일의 자리수 확인
sum++;
if(sum==1)
System.out.println("박수짝"); //하나만 있는 경우
else if(sum==2)
System.out.println("박수짝짝"); //둘 다 있는 경우
else
System.out.println(num); //없는 경우
}
else
System.out.println("정수 범위 초과");
}
}
7. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. (100, 100)과 (200, 200)의 두 점으로 이루어진 사각형이 있을 때, Scanner를 이용하여 정수 x와 y 값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.
점 (x, y)의 좌표를 입력하시오>>150 150
(150,150)는 사각형 안에 있습니다.
import java.util.Scanner;
public class Chap02_07 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
System.out.print("점 (x,y)의 좌표를 입력하시오>>");
int x=scan.nextInt();
int y=scan.nextInt();
if ((x>100)&&(x<200)&&(y>100)&&(y<200)) //직사각형의 테두리에 걸치는 것 포함x
System.out.println("("+x+","+y+") 는 사각형 안에 있습니다.");
else
System.out.println("("+x+","+y+") 는 사각형 안에 있지 않습니다.");
scan.close();
}
}
나는 이 문제에서 점이 직사각형의 테두리에 걸치는 것은 안에 있지 않는다고 생각하고 풀었다.
테두리에 걸쳐도 포함한다고 생각하고 푼다면
if문을 if ((x>=100)&&(x<=200)&&(y>=100)&&(y<=200))로 바꿔주면 된다.
8. 2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 직사각형을 구성하는 두 점 (x1, y1),(x2, y2)를 입력받아 (100, 100), (200, 200)의 두 점으로 이루어진 직사각형과 충돌하는지 판별하는 프로그램을 작성하라.
힌트: 다음은 점 (x,y)가 (rectx1, recty1), (rectx2, recty2)의 사각형 안에 있으면 true를 리턴하는 메소드이다. 이 메소드를 활용하라.
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;
}
이 힌트를 보면 사각형의 테두리에 점이 걸친 것도 사각형에 포함한다고 생각하고 문제를 풀라는 거 같다.
또한 문제만 보았을 때는 두 사각형이 충돌한다는 기준이 너무 애매하다고 생각했다.
두 사각형의 변들이 서로 겹쳤을 때만 충돌이라고 하는 건지, 한 사각형이 다른 사각형 안에 포함되었을 때도 충돌한다고 하는 건지...
근데 힌트를 보면 한 점이 다른 두 점이 이루는 사각형 안에 존재하는지 알 수 있는 메소드를 주었다.
이 힌트를 보고 다음의 경우에만 사각형이 충돌한다고 생각하고 풀었다.
(100,100)과 (200,200)이 이루는 사각형 안에 (x1,y1)이나 (x2,y2) 한 점만 들어가 있고 다른 점이 이 사각형 밖에 있을 때 두 사각형은 무조건 충돌하게 되어있다.
나는 위와 같이 전재를 하고 문제를 풀었지만, 문제가 정확하게 명시를 안해줬기 때문에 한 사각형이 다른 사각형 안에 포함되었을 때도 충돌한다고 전재하고 풀어도 될 거 같다.
import java.util.Scanner;
public class Chap02_08 {
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) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("점 (x1,y1)의 좌표를 입력하시오>>");
int x1=scan.nextInt();
int y1=scan.nextInt();
System.out.print("점 (x2,y2)의 좌표를 입력하시오>>");
int x2=scan.nextInt();
int y2=scan.nextInt();
if(inRect(x1,y1,100,100,200,300)^inRect(x2,y2,100,100,200,200)) //제시한 점 1, 2 중 하나라도 주어진 사각형 안에 있다면 true
System.out.println("두 사각형은 충돌합니다.");
else
System.out.println("두 사각형은 충돌하지 않습니다.");
scan.close();
}
}
이 코드는 포함되었을 때는 충돌이 아니라고 전재하고 푼 문제.
포함되었을 때도 충돌이라고 전재한다면
if문의 if(inRect(x1,y1,100,100,200,300)^inRect(x2,y2,100,100,200,200))을
if(inRect(x1,y1,100,100,200,300)||inRect(x2,y2,100,100,200,200)||inRect(100,100,x1,y1,x2,y2)||inRect(200,200,x1,y1x2,y2))로 바꿔주면 된다.
이는 (100,100), (200,200) 사각형이 (x1,y1),(x2,y2) 사각형 안에 포함될 경우도 추가해준 것이다.
9. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점 (X, Y)를 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라.
원의 중심과 반지름 입력>>10 10 6.5
점 입력>>13 13
점 (13.0, 13.0)는 원 안에 있다.
힌트: 중심에서 점 (x, y) 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다. 변수 x에 대한 제곱근의 값은 Math.sqrt(x)를 이용하면 된다. Math는 6장에서 설명한다.
import java.util.Scanner;
public class Chap02_09 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("원의 중심과 반지름 입력>>");
int circlex=scan.nextInt();
int circley=scan.nextInt();
double radius=scan.nextDouble();
System.out.print("점 입력>>");
int x=scan.nextInt();
int y=scan.nextInt();
double distance=(((circlex-x)*(circlex-x))+((circley-y)*(circley-y)));
distance=Math.sqrt(distance);
if(distance<=radius)
System.out.println("점 ("+x+", "+y+")는 원 안에 있다.");
else
System.out.println("점 ("+x+", "+y+")는 원 안에 있지 않다.");
scan.close();
}
}
10. 원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.
첫번째 원의 중심과 반지름 입력>>10 10 3
두번째 원의 중심과 반지름 입력>>12 12 2
두 원은 서로 겹친다.
import java.util.Scanner;
public class Chap02_10 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
System.out.print("첫번째 원의 중심과 반지름 입력>>");
int x1=scan.nextInt();
int y1=scan.nextInt();
double radius1=scan.nextDouble();
System.out.print("두번째 원의 중심과 반지름 입력>>");
int x2=scan.nextInt();
int y2=scan.nextInt();
double radius2=scan.nextDouble();
double distance=(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
distance=Math.sqrt(distance);
if (distance<=(radius1+radius2))
System.out.println("두 원은 서로 겹친다.");
else
System.out.println("두 원은 서로 겹치지 않는다.");
scan.close();
}
}
11. 숫자를 입력받아 3~5는 "봄", 6~8은 "여름", 9~11은 "가을", 12,1,2의 경우 "겨울"을, 그 외 숫자를 입력한 경우 "잘못입력"을 출력하는 프로그램을 작성하라.
달을 입력하세요(1~12)>>9
가을
(1)if-else 문을 이용하여 프로그램을 작성하라.
import java.util.Scanner;
public class Chap02_11 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
System.out.print("달을 입력하세요(1~12)>>");
int month=scan.nextInt();
if ((month>=1)&&(month<=12)) {
if((month==3)||(month==4)||(month==5))
System.out.println("봄");
else if((month==6)||(month==7)||(month==8))
System.out.println("여름");
else if((month==9)||(month==10)||(month==11))
System.out.println("가을");
else
System.out.println("겨울");
}
else
System.out.println("잘못입력");
}
}
(2)switch 문을 이용하여 프로그램을 작성하라.
import java.util.Scanner;
public class Chap02_11 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
System.out.print("달을 입력하세요(1~12)>>");
int month=scan.nextInt();
if ((month>=1)&&(month<=12)) {
switch (month) {
case 3: case 4: case 5:
System.out.println("봄");
break;
case 6: case 7: case 8:
System.out.println("여름");
break;
case 9: case 10: case 11:
System.out.println("가을");
break;
case 12: case 1: case 2:
System.out.println("겨울");
break;
}
}
else
System.out.println("잘못입력");
}
}
12. 사칙 연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 +, =, *, /의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다."를 출력하고 종료한다.
연산>>2 + 4
2+4의 계산 결과는 6
힌트: 연산자는 scanner.next()를 이용하여 문자열로 입력받으면 된다. 문자열 s가 "+"와 같은지 검사하려면 if(s.equals("+"))를 이용하며, true이면 s와 "+"가 같다.
(문제의 '='는 '-' 오타난걸로 생각하고 '-'로 품.)
(1) 연산 식을 구분할 때 if-else 문을 이용하여 프로그램을 작성하라.
import java.util.Scanner;
public class Chap02_12 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
double answer=0;
System.out.print("연산>>");
double num1=scan.nextDouble();
String oper=scan.next();
double num2=scan.nextDouble();
if (num2!=0) {
if (oper.equals("+"))
answer=num1+num2;
else if (oper.equals("-"))
answer=num1-num2;
else if (oper.equals("*"))
answer=num1*num2;
else
answer=num1/num2;
System.out.println((int)(num1)+oper+(int)(num2)+"의 계산 결과는 "+(int)(answer));
}
else
System.out.println("0으로 나눌 수 없습니다.");
}
}
(2) 연산 식을 구분할 때 switch 문을 이용하여 프로그램을 작성하라.
import java.util.Scanner;
public class Chap02_12 {
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
double answer=0;
System.out.print("연산>>");
double num1=scan.nextDouble();
String oper=scan.next();
double num2=scan.nextDouble();
if (num2!=0) {
switch (oper) {
case "+":
answer=num1+num2;
break;
case "-":
answer=num1-num2;
break;
case "*":
answer=num1*num2;
break;
case "/":
answer=num1/num2;
break;
}
System.out.println(num1+oper+num2+"의 계산 결과는 "+answer);
}
else
System.out.println("0으로 나눌 수 없습니다.");
}
}
Open Challenge 가위바위보 게임: 두 사람이 하는 가위바위보 게임을 만들어보자. 두 사람의 이름은 '철수와 '영희'이다. 먼저 "철수 >>" 출력하고 "가위", "바위", "보" 중 하나를 문자열로 입력받는다. 그리고 "영희 >>"를 출력하고 마찬가지로 입력받는다. 입력받은 문자열을 비교하여 누가 이겼는지 판별하여 승자를 출력한다.
가위바위보 게임입니다. 가위, 바위, 보 중에서 입력하세요.
철수 >> 가위
영희 >> 보
철수가 이겼습니다.
힌트:
- System.out.print("철수 >>")는 화면 출력 이후 커서를 다음 줄로 옮기지 않는다.
- 문자열을 읽기 위해서는 Scanner 클래스의 next() 메소드를 이용하면 된다.
- 자바에서 문자열 비교는 주의를 기울여야 한다. String var;로 선언한 var와 "가위"를 비교하기 위해서는 if(var=="가위")로 하면 안 된다. if(var.equals("가위"))로 비교하여야 한다(6장의 String 절에서 자세히 설명).
import java.util.Scanner;
public class Chap2_OpenChallenge {
public static void main(String[] args) {
System.out.println("가위바위보 게임입니다. 가위, 바위, 보 중에서 입력하세요");
Scanner scan=new Scanner(System.in);
int winner=0;
System.out.print("철수>>>");
String cs=scan.next();
System.out.print("영희>>>");
String yh=scan.next();
switch(cs) {
case "가위":
if(yh.equals("가위"))
winner=1;
else if (yh.equals("바위"))
winner=2;
else
winner=3;
break;
case "바위":
if(yh.equals("가위"))
winner=3;
else if (yh.equals("바위"))
winner=1;
else
winner=2;
break;
case "보":
if(yh.equals("가위"))
winner=2;
else if (yh.equals("바위"))
winner=3;
else
winner=1;
break;
}
switch (winner) {
case 1:
System.out.println("비겼습니다.");
break;
case 2:
System.out.println("영희가 이겼습니다.");
break;
case 3:
System.out.println("철수가 이겼습니다.");
break;
}
}
}
'Programming Language > Java' 카테고리의 다른 글
명품 JAVA Programming 제6강 자바 기본 프로그래밍 실습문제 (0) | 2020.08.22 |
---|---|
명품 JAVA Programming 제5강 자바 기본 프로그래밍 실습문제 (0) | 2020.08.08 |
명품 JAVA Programming 제4강 자바 기본 프로그래밍 실습문제 (0) | 2020.08.07 |
명품 JAVA Programming 제3강 자바 기본 프로그래밍 실습문제 (0) | 2020.07.22 |