1. 두 정수를 입력받아 합을 구하여 출력하는 프로그램을 작성하라.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a, b;
a = sc.nextInt();
b = sc.nextInt();
System.out.println(a + " + " + b + " = " + (a+b));
sc.close();
}
Scanner 클래스를 이용할 수 있는지에 대해 알아보기 위한 문제였습니다. 먼저 Scanner 클래스의 객체 sc를 생성해 줍니다.그 뒤에 nextInt()를 이용하여 정수를 입력받은 뒤 형식에 맞게 출력해 주면 됩니다.
2. 2차원 평면에서 하나의 직사각형은 두 점으로 표현된다. (50,50)과 (100,100)의 두 점으로 이루어진 사각형이 있다고 하자. 한 점을 구성하는 정수 x와 y의 값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지 판별하는 프로그램을 작성하라.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x, y;
x = sc.nextInt();
y = sc.nextInt();
if((x>=50 && x <= 100) && (y >= 50 && y <= 100)){
System.out.println("점(" + x + "," + y + ")은 (50, 50)과 (100,100) 사각형 내에 있습니다.");
}
else{
System.out.println("점(" + x + "," + y + ")은 (50, 50)과 (100,100) 사각형 내에 없습니다.");
}
sc.close();
}
3. 다음과 같이 AND와 OR의 논리 연산을 입력받아 결과를 출력하는 프로그램을 작성하라
(단, if 문 대신 switch 문을 이용하라)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("논리 연산을 입력하세요>>");
int flag = 1;
String bool;
bool = sc.nextLine();
sc.close();
String[] boolArr = bool.split(" ");
String prevOp = "";
for(int i = 0; i < boolArr.length; i++){
if(boolArr[i].contentEquals("and") || boolArr[i].contentEquals("or")) {
prevOp = boolArr[i];
}
else{
try {
boolean vf = Boolean.parseBoolean(boolArr[i]);
if(!vf && prevOp.contentEquals("and")){
flag = 0;
break;
}
}
catch(Exception e){
e.printStackTrace();
continue;
}
}
}
switch(flag){
case 0:
System.out.println("false");
break;
case 1:
System.out.println("true");
break;
}
}
먼저 문자열을 입력 받아야하는데, nextLint() 함수를 이용해 입력받아야 합니다. next() 함수의 경우 띄어쓰기가 들어간 문자열을 입력받으면 띄어쓰기를 기준으로 한 개의 입력으로 인식합니다. ex) true and false는 true, and, false 총 세 개의 입력으로 인식합니다. 먼저 nextLine()을 통해 입력 받도록 합니다.
입력받는 문자열의 형식은 true or false 또는 false and true와 같은 방식으로 입력받습니다. 때문에 띄어쓰기를 기준으로 String 배열을 만들 수 있다는 것을 알 수 있습니다. 배열로 만든 뒤에 for문을 통해 "and" 또는 "or"인 경우 prevOp에 이전 조건으로 미리 저장해둡니다. 아닌 경우 boolean 값으로 파싱 해주고 그 값이 false 라면 이전 조건이 "and" 였는지 확인해 줍니다. 만약 false면서 and였다면 for문 break 후 flag를 0으로 초기화합니다.
초기화된 flag는 swich문으로 0 또는 1인 경우에 맞게 출력해 줍니다. 여기서 switch문을 왜 써야 하는지 모르겠어서 억지로 쓰긴 했습니다...
4. 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권 500원짜리 동전, 100원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("돈의 액수를 입력하세요>>");
int money = sc.nextInt();
sc.close();
int m50000 = money / 50000;
int m10000 = (money-m50000*50000)/10000;
int m1000 = (money-m50000*50000-m10000*10000)/1000;
int m500 = (money-m50000*50000-m10000*10000-m1000*1000)/500;
int m100 = (money-m50000*50000-m10000*10000-m1000*1000-m500*500)/100;
int m10 = (money-m50000*50000-m10000*10000-m1000*1000-m500*500-m100*100)/10;
int m1 = money-m50000*50000-m10000*10000-m1000*1000-m500*500-m100*100-m10*10;
System.out.printf("오만원%2d장, 만원%2d장, 천원%2d개, 오백원%2d개, 백원%2d개, 십원%2d개, 일원%2d개",
m50000, m10000, m1000, m500, m100, m10, m1);
}
내림차순으로 하나씩 구하면서 내려가면 됩니다.
5. 학점이 A, B 이면 "Excellent", 학점이 C, D 이면 "Good", 학점이 F 이면 "Bye"라고 출력하는 프로그램을 작성하라.(단, switch와 break를 활용하라)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학점을 입력하세요>>");
String grade = sc.next();
sc.close();
switch(grade){
case "A":
case "B":
System.out.println("Excellent");
break;
case "C":
case "D":
System.out.println("Good");
break;
default:
System.out.println("Bye");
break;
}
}
switch 문을 이용해 A와 B를 C와 D를 묶어 출력하고 나머지는 F라고 생각하고 default 조건으로 넣어주면 됩니다.
6. 369게임의 일부를 작성해 보자. 1~99까지의 정수를 입력받고 수에 3, 6, 9 중 하나가 있는 경우는 "박수짝" 두 개가 있는 경우는 "박수 짝짝", 하나도 없으면 "박수없음"을 출력하는 프로그램을 작성하라.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("1~99 사이의 정수를 입력하세요>>");
int num = sc.nextInt();
sc.close();
int[] numArr = new int[] {num/10, num%10};
int count = 0;
for(int i = 0; i < numArr.length; i++){
if(numArr[i] == 3 || numArr[i] == 6 || numArr[i] == 9) count++;
}
switch(count){
case 0:
System.out.println("박수없음");
break;
case 1:
System.out.println("박수짝");
break;
case 2:
System.out.println("박수짝짝");
break;
default:
}
}
입력받은 정수를 10으로 나누고 10으로 나눈 나머지를 각 각 배열에 담아 줍니다. 배열에 담긴 값들을 for문을 통해 3,6 또는 9인지 확인하고 맞다면 count를 1 증가시킵니다.
count를 swich문에 넣고 박수의 개수에 따라 출력합니다.
Bonus 1 사칙 연산을 입력받아 실행해 주는 프로그램을 작성하고자 한다. 이때 연산자는 +, -, *, /의 4가지로 하고 피연산자는 모두 실수이며, 다음과 같이 피연산자와 연산자는 빈칸으로 분리하여 입력하는 것으로 한다.
ex) 32.3 + 3 16.6 - 20.3 5 * 2.1 6 / 3
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("연산을 입력하세요>>");
String exp = sc.nextLine();
sc.close();
String[] expArr = exp.split(" ");
double exp1 = Double.parseDouble(expArr[0]);
double exp2 = Double.parseDouble(expArr[2]);
switch(expArr[1]){
case "+":
System.out.println(exp1 + expArr[1] + exp2 + "=" + (exp1+exp2));
break;
case "-":
System.out.println(exp1 + expArr[1] + exp2 + "=" + (exp1-exp2));
break;
case "*":
System.out.println(exp1 + expArr[1] + exp2 + "=" + (exp1*exp2));
break;
case "/":
System.out.println(exp1 + expArr[1] + exp2 + "=" + (exp1/exp2));
break;
default:
}
}
이전 문제들을 푼 것과 동일합니다.
Open Challenge 두 사람이 하는 가위바위보 게임을 만들어보자. 두 사람의 이름은 '철수'와 '영희'이다. 먼저 "철수"를 출력하고 "가위", "바위", "보" 중 하나를 문자열로 입력받는다. "영희"에 대해서 마찬가지 방법으로 입력받는다. 두 사람으로부터 문자열을 입력받은 후 누가 이겼는지 판별하여 승자를 출력한다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("가위바위보 게임입니다. 가위, 바위, 보 중 하나를 입력하세요.");
System.out.print("철수>>");
String cs = sc.next();
System.out.print("영희>>");
String yh = sc.next();
sc.close();
if(cs.contentEquals(yh)) System.out.println("비겼습니다.");
else{
if((cs.contentEquals("가위") && yh.contentEquals("보")) || (cs.contentEquals("바위") && yh.contentEquals("가위"))
|| (cs.contentEquals("보") && yh.contentEquals("바위"))){
System.out.println("철수가 이겼습니다.");
}
else{
System.out.println("영희가 이겼습니다.");
}
}
}
철수와 영희를 각 각 입력받은 뒤에 값이 같으면 비긴 것으로 출력합니다. 값이 다른 경우 철수가 이기는 조건을 기준으로 각 각 이기는 경우의 출력 값을 넣어줍니다.
'Algorithm > 명품 JAVA 에센셜' 카테고리의 다른 글
명품 JAVA 에센셜 3장 실습 문제 풀이 (1) | 2023.11.28 |
---|---|
명품 JAVA 에센셜 1장 실습 문제 풀이 (0) | 2023.10.31 |