본문 바로가기

BackEnd/Java

[java] 2022.12.08 연습 문제 풀이

728x90
반응형
1. 문제 1번

 

문제1) 자바 프로그래밍 과목을 수강하는 학생들의 시험 점수들을 읽어들여 통과 점수(60점 이상)를 받은 학생들의 수와 낙제 점수(60점 미만)을 받은 학생들의 수를 계산하여 출력하는 프로그램을 작성하라. 수강 학생들의 수는 1이상이라고 가정한다.

 

입력) 첫 번째 정수 (종료하려면 음수)를 입력하세요 : 98
         다음 정수(종료하려면 음수)를 입력하세요 : 54
                                       ...
         다음 정수(종료하려면 음수)를 입력하세요 : -5

 

출력) 학생들의 수 : 10
         통과 학생들의 수 : 6
         낙제 학생들의 수 : 4

 

package java1208;

import java.util.Scanner;

public class ex01 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int grade = 0;            // 한 학생의 점수
		int numStudents = 0;       // 학생들의 수
		int numPass = 0;           // 통과 학생 수
		int numFail = 0;           // 낙제 학생 수
		
		System.out.print("첫 번째 정수(종료하려면 음수)를 입력하세요 : ");
		grade = scan.nextInt();
		
		while(grade >= 0) {
				
			numStudents++;
			
			if(grade >= 60) {
				numPass++;
			} else {
				numFail++;
			}
			
			System.out.print("다음 정수(종료하려면 음수)를 입력하세요 : ");
			grade = scan.nextInt();		
		}
		
		System.out.println();
		System.out.println("학생들의 수 : " + numStudents);
		System.out.println("통과 학생들의 수 : " + numPass);
		System.out.println("낙제 학생들의 수 : " + numFail);
		scan.close();
	}
}

 

 

2. 문제 2번

 

문제2) 주어진 문장 내에 있는 글자들의 수를 출력하는 프로그램을 설계한 후 작성하라. 입력 받은 문장 내에서
마침표(.), 물음표(?), 쉼표(,)와 느낌표(!)와 같은 구두점은 없다고 가정한다. 문장 내에 있는 글자들의 수에
빈칸, 빈줄, 탭(tab)과 같은 흰색 공간문자는 포함되지 않는다.

 

입력) 한 줄의 문장을 입력하세요: 나는 가을을 좋아합니다

 

출력) 글자들의 수 = 10

 

package java1208;

import java.util.Scanner;

public class text01 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.print("한 줄의 문장을 입력하세요 : ");
		String a = scan.nextLine();
		
		int count = 0;
		
		for(int i=0; i<a.length(); i++) {
			if(a.charAt(i) != ' ' && a.charAt(i) != '\n' && a.charAt(i) != '\t') {
				count++;
			}
		}
		System.out.print("글자들의 수 = " + count);
		scan.close();
	}
}

 

힌트)

빈칸' ', 빈줄 '\n', 탭 '\t'
String inputStr = scan.nextLine( );
inputStr.length(); <- 12
inputStr.charAt(0); 나
inputStr.charAt(1); 는
inputStr.charAt(2); 빈칸

 

 

3. 문제 3번

 

문제3) 인터넷 뱅킹을 위한 암호를 처리하는 자바 프로그램을 설계하고, 작성하라. 사용자로부터 암호를 입력 받아야한다.
맞는 암호가 입력되면 "환영합니다"라는 메시지를 출력하고 프로그램을 종료해야 한다.
틀린 암호가 입력되면 "암호가 틀립니다"라는 메시지를 출력해야 한다. 그리고 다시 암호를 입력 받아야한다.
사용자가 암호를 세 번 잘못 입력하면 "접속을 거부합니다"라는 메시지를 출력하고 프로그램을 종료해야한다.
맞는 암호는 "codehows"

 

package java1208;

import java.util.Scanner;

public class text02 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		String pwd = "codehows";
		System.out.print("암호를 입력하세요 : ");
		String input = scan.nextLine();
		int count = 0;
		
		while(count>=0) {
			
			if(input.equals(pwd)) {
				System.out.println("환영합니다.");
				break;
			}
			else {
				System.out.println("암호가 틀립니다.");
				count++;
				if(count < 3) {
					System.out.print("암호를 다시 입력하세요 : ");
					input = scan.nextLine();
				}
			}
				
			if(count == 3) {
				System.out.println("접속을 거부합니다.");
				break;
			}
		}
		scan.close();
	}
}

 

 

4. 문제 4번

 

문제4) 1부터 10까지의 정수 i에 대해 sum = 1 + 2 +.... + i를 계산하여 아래와 같이 두 칸에 출력하는 프로그램을 설계 하고 작성하라. 

 

예를 들면 다음은 1부터 5까지의 값들에 대한 출력 결과이다.

 

출력 예시)

1 1
2 3
3 6
4 10
5 15

 

package java1208;

import java.util.Scanner;

public class ex04 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int sum = 0;

		System.out.println("값\t합");
		
		for(int i=1; i <= 10; i++) {
			sum += i;
			System.out.println(i + "\t" + sum);
		}
		
		scan.close();
	}
}

 

5. 문제 5번

 

문제5) 한 대학교 앞에 할인 마트가 있다. 이 가게의 모든 상품의 가격은 500원 이하이다. 고객이 가게에서 물건 한 개를 사고 500원을 낼 때 거스름돈을 계산하는 프로그램을 설계하고 작성하라. 거스름 돈은 반드시 100원, 10원, 1원 짜리 동전으로 주어야 한다. 또한 동전의 개수를 최소화 해야 한다. 

 

출력 예시)

구매 금액을 입력하세요 [0-500]: 122
378원의 거스름돈은 다음과 같다.
100원짜리 동전  3개
10원짜리 동전 7개
1원짜리 동전 8개

 

package java1208;

import java.util.Scanner;

public class ex05 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int pay;
		int hun = 0;
		int ten = 0;
		int one = 0;
		
		System.out.print("구매 금액을 입력하세요[0-500] : ");
		pay = scan.nextInt();
		
		pay = 500 - pay;
		
		System.out.println(pay + "원의 거스름돈은 다음과 같다.");
		
		while(pay <= 500) {
			if(pay >= 100) {
				hun = pay / 100;
				pay -= hun * 100; 
				
			} else if(pay >= 10) {
				ten = pay / 10;
				pay -= ten * 10;
				
			} else {
				one = pay;
				break;
			}
		}
		
		System.out.println("100원짜리 동전 :\t" + hun + "개");
		System.out.println("10원짜리 동전 :\t" + ten + "개");
		System.out.println("1원짜리 동전 :\t" + one + "개");

		scan.close();
	}
}

 

 

6. 문제 6번

 

문제6) 사용자로부터 한 문자열을 읽어 들인 후 그 문자열 안에 있는 각 모음(a, e, i, o, u)의 수와 자음들의 수를
알아내어 출력하는 프로그램을 설계하고 작성하라. 각 모음에 대한 별도의 계수기를 사용해라.
예를 들면 읽어들인 문자열이 "I love Java programming very much"라면 모음 a의 수는 3, 모음 e의 수는 2,
모음 i의 수는 2, 모음 o의 수는 2, 모음 u의 수는 1이고 자음들의 수는 18이다.

 

package java1208;

import java.util.Scanner;

public class ex05 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요 : ");
		String str = scan.nextLine();
		
		int a1 = 0;
		int a2 = 0;
		int a3 = 0;
		int a4 = 0;
		int a5 = 0;
		int a6 = 0;
		
		str = str.toLowerCase();
		
		for(int i=0; i < str.length(); i++) {
			if(str.charAt(i) == 'a') {
				a1++;
			} else if(str.charAt(i) == 'e') {
				a2++;
			} else if(str.charAt(i) == 'i') {
				a3++;
			} else if(str.charAt(i) == 'o') {
				a4++;
			} else if(str.charAt(i) == 'u') {
				a5++;
			} else if(str.charAt(i) != ' ') {
				a6++;
			}
		}
		
		System.out.println("모음 a의 수는 " + a1);
		System.out.println("모음 e의 수는 " + a2);
		System.out.println("모음 i의 수는 " + a3);
		System.out.println("모음 o의 수는 " + a4);
		System.out.println("모음 u의 수는 " + a5);
		System.out.println("자음들의 수는 " + a6);
		
		scan.close();
	}
}

 

 

7. 문제 7번

 

문제7) 택시 운전사가 10명의 손님을 태우면 그 날 영업을 중단하고 집에 가서 쉰다고 하자. 이경우에 그 날의 수입을 계산하여 출력하는 프로그램을 설계하고 작성하라. 각 손님이 낸 요금을 읽어 들인다. 수입은 10명의 손님들의 요금들의 합이다.


출력) 손님의 이름을 입력하세요 : 만수
요금을 입력하세요 : 5000
손님의 이름을 입력하세요 :신자
요금을 입력하세요 : 8000
손님의 이름을 입력하세요 : 워드
요금을 입력하세요 : 10000

총 수입은 23000이다.

 

package java1208;

import java.util.Scanner;

public class ex06 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int sum = 0;
		int count = 0;
		int pay;
		String name;
		
		while(true) {
			count++;
			
			System.out.print("손님의 이름을 입력하세요 : ");
			name = scan.next();
						
			System.out.print("요금을 입력하세요 : ");
			pay = scan.nextInt();
			
			sum += pay;
						
			if(count == 10) break;
		}
		
		System.out.println("총 수입은 " + sum + "이다.");
		
		scan.close();
	}
}

 

 

8. 문제 8번

 

문제8) 사용자와 숫자 맞추기 게임을 하는 프로그램을 설계하고 작성하라. 프로그램은 1부터 10사이의 숫자를 임의로 만들어 낸다. 그 다음에 사용자에게 만들어진 숫자를 추측하도록 요청한다. 사용자가 추측한 숫자가 틀렸다면 추측한 숫자가 너무 큰지 혹은 너무 작은지를 알려 준다. 그 다음에 사용자에게 숫자를 맞출 때까지 만들어진 숫자를 추측하도록 요청한다. 사용자가 추측한 숫자가 맞다면 '맞추셨습니다'라는 축하 메시지를 출력해야 한다. 프로그램을 작성하기에 앞서 설계를 하라. 다음은 프로그램의 모범 출력이다.

출력 ]
추측한 숫자를 입력하세요: 5
추측한 숫자가 틀렸습니다.
추측한 숫자가 너무 작습니다.
추측한 숫자를 입력하세요: 8
추측한 숫자가 틀렸습니다.
추측한 숫자가 너무 작습니다.
추측한 숫자를 입력하세요: 10
맞추셨습니다.
- 램덤 생성
- import java.util.Random;   // import 
- Random generator = new Random();    // 랜덤 객체 생성
- generator.nextInt(10) + 1;        // 랜덤 수 생성 : + 1 : 0부터 시작이라 1부터 시작으로 바꾸기 위해 + 1

package java1208;
import java.util.Random;

import java.util.Scanner;

public class ex08 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		Random generator = new Random();
		int comNumb = generator.nextInt(10) + 1;
		int userNumb = 0;

		
		while(userNumb <= 10 && userNumb >= 0) {
			
			System.out.print("추측한 숫자를 입력하세요 : ");
			userNumb = scan.nextInt();
			
			if(comNumb == userNumb) {
				System.out.println("맞추셨습니다.");
				break;
			} else {
				System.out.println("추측한 숫자가 틀렸습니다.");
				if(comNumb > userNumb) {
					System.out.println("추측한 숫자가 너무 작습니다.");
				} else {
					System.out.println("추측한 숫자가 너무 큽니다.");
				}
			}
		}
		scan.close();
	}
}

 

 

9. 문제 9번

 

문제9) 숫자 맞추기 게임을 하는 프로그램을 설계하고 작성하라. 그 프로그램은 1과 100 사이의 임의의 정수를 선택해야 한다. 1과 100도 선택될 수 있다. 그 다음에 사용자에게 선택된 숫자를 맞춰보라고 요청한다. 사용자가 추축한 숫자에 대해 맞는지 아니면 추측한 숫자가 큰지 혹은 작은지를 알려 주어야 한다. 사용자가 정확하게 맞추거나 맞추기를 그만둘 때까지 숫자 맞추기를 계속하게 하라.
사용자가 그만 두기를 원하는지를 결정하기 위해 감시 값을 사용하라. 맞출 때까지 추측한 횟수를 세고 사용자가 맞추고 난 후 그 횟수를 출력하라. 각 게임이 끝난 후에 사용자가 맞추기 게임을 계속하기를 원하는지를 물어보라. 사용자가 게임을 종료하기를 원할 때까지 게임을 계속하게 하라.

 

package java1208;
import java.util.Random;

import java.util.Scanner;

public class ex08 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		Random generator = new Random();
		int comNumb = generator.nextInt(100) + 1;
		int userNumb = 0;
		String yn = "Y";
		int count = 0;
		
//		System.out.println(comNumb);
		

		do {
			if(yn.equals("Y")) {
				
				count++;
				
				do {
					System.out.print("추측한 숫자를 입력하세요(0~100) : ");
					userNumb = scan.nextInt();
					
				} while(userNumb < 0 || userNumb > 100);
				
				if(comNumb == userNumb) {
					System.out.println("맞추셨습니다!!");
					break;
				} else {
					System.out.println("추측한 숫자가 틀렸습니다.");
					
					if(comNumb > userNumb) {
						System.out.println("추측한 숫자가 작습니다.");
					} else {
						System.out.println("추측한 숫자가 큽니다.");
					}
				}			
				
				System.out.print("게임을 계속하시겠습니까?(Y/N) : ");
				yn = scan.next();
				
			} else {
				System.out.print("다시 입력해주세요(Y/N) : ");
				yn = scan.next();
				
				System.out.println(yn);
			}
			
			yn = yn.toUpperCase();
			if(yn.equals("N")) break;

			
		}while(true);
		
		System.out.println("게임이 종료되었습니다.");
		System.out.println("추측한 횟수는 : " + count);

		scan.close();
	}
}
728x90
반응형

'BackEnd > Java' 카테고리의 다른 글

[java] 배열(array)  (0) 2022.12.12
[java] 2022.12.08 추가 연습 문제 풀이  (0) 2022.12.12
[java] 반복문(for, while, do~while)  (0) 2022.12.12
[java]연산자  (0) 2022.12.11
[java]변수와 상수  (0) 2022.12.11