본문 바로가기
JAVA

[JAVA] 문제풀이 0810

by KhyeonS 2022. 8. 10.

Q4) 사용자의 이메일 주소를 입력받아서 @앞의 문자의 길이가 6보다 작거나 10보다 클때 입력한 이메일이 형식이 옳바르지 않다고 출력하기 제대로 보이면 @앞의 문자만 출력하기 

package java0810;

import java.util.Scanner;

public class TestQ1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String email;
		System.out.println("이메일을 입력해주세요 : ");
		Scanner scan = new Scanner(System.in);
		email=scan.next();
		String len = email.substring(0, email.indexOf('@')); // @앞에서 6~10자리까지만 인정
		if (len.length() < 6 || len.length()>10) {
			System.out.println("이메일 형식이 옳바르지 않습니다");
		}else {
			System.out.println(len+"- 이메일 확인");
		}
	}

}


Q5)임의의 문자를 입력받아서 그중 a의갯수를 계산하시오.

package java0810;

import java.util.Scanner;

public class TestQ5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str;
		int count =0;
		System.out.print("임의의 문자 10개 이내를 입력하세요");
		Scanner scan = new Scanner(System.in);
		str=scan.next();
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i)=='a') {
				count++;
			}
		}
		System.out.println("a의 갯수 : "+count);
	}

}


Q6)주민 번호를 입력 받아서(-포함) '당신은 ****년 **월 **일에 태어난 남자/여자입니다'를 출력하시오.

 

package java0810;

import java.security.Identity;
import java.util.Scanner;

public class TestQ6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("주민번호를 -포함해서 모두 입력하세요=> 예)950123-203345");
		System.out.print(">>");
		Scanner scan= new Scanner(System.in);
		String ju = scan.next();   // - 포함 이므로 nextInt() 불가
		if (ju.trim().length() < 14 || ju.trim().charAt(6)!= '-') {
			System.out.println("-포함한 옳바른 주민 번호를 입력하세요");
		}else {
			String year = "";
			String result= "";
			year = ju.substring(0, 2); // 주민번호에서 앞 두자리가 년도
			if (Integer.parseInt(year) <= 14) {
				result = "당신은 20"; // 20** 년도 출생
			}else {
				result = "당신은 19"; // 19** 년도 출생 
			}
			result += year + "년" + ju.substring(2, 4) + "월" + ju.substring(4, 6)+ "일에 태어난 ";
			if (ju.charAt(7)%2 != 0) {
				result += "남자 입니다.";
			}else {
				result += "여자 입니다.";
			}
			System.out.println(result);
			
		}
	}

}


Q7) 회문수는 앞에서나 뒤에서 읽었을때 똑같은 수를 말하는데 12121식의 숫자를 말한다. 키보드로 세자리이상을 입력받은 뒤 회문수인지 판단하시오.

package java0810;

import java.util.Scanner;

public class TestQ7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = ""; //원본 문장을 입력받을 객체
		String str2 = "";//원본을 뒤집어서 저장할 객체
			
		System.out.println("3자리 이상 숫자를 입력하세요 : ");
		Scanner scan = new Scanner(System.in);
		str1 = scan.next();
			
		//키보드에서 받은 원본 문장을 뒤집어서 str2에 저장하는 코드
		for(int i = str1.length(); i > 0; i--){
			str2 += str1.charAt(i-1);    // 핵심
		}
			
		if(str1.equals(str2)){
			System.out.println(str1 + "은(는) 회문수 입니다.");
		}
		else{
			System.out.println(str1 + "은(는) 회문수가 아닙니다.");
		}			

	}

}


Q8) 학생들의 수학과 영어 성적을 등록하는 프로그램이 있다. 프로그램을 실행하면 몇명의 정보를 저장 할 것인지를 입력받은 후, 입력받은 수 만큼 학생들의 이름과 수학, 영어성적을 입력 받아서 보이는 프로그램 작성

코드 1

package java0810;

import java.util.Scanner;

public class TestQ8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("등록할 학생 수 : ");
		Scanner scan =new Scanner(System.in);
		int n =scan.nextInt();
		String str [][] =new String[n][3]; // n명의 이름, 영어, 수학 3개를 위한 배열
		for (int i = 0; i < str.length; i++) {
			System.out.print("이름: ");
			str[i][0] = scan.next();
			System.out.print("영어: ");
			str[i][1] = scan.next();
			System.out.print("수학: ");
			str[i][2] = scan.next();
			System.out.println("-----------");
		}
		System.out.println(str.length+" 명 등록했습니다.");
		for (int i = 0; i < str.length; i++) {
			for (int j = 0; j < str[i].length; j++) {
				System.out.print(str[i][j]+ " ");
			}
		}
		
	}

}

코드 2

package java0810;

import java.util.Scanner;

public class TestQ8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("등록할 학생 수 : ");
		Scanner scan =new Scanner(System.in);
		int n =scan.nextInt();

		String[] info = {"이름 :", "영어 :","수학 :"};
		String str[][] =new String[n][info.length];
		for (int i = 0; i < str.length; i++) {
			for (int j = 0; j < str[i].length; j++) {
				System.out.print(info[j]);
				str[i][j]=scan.next();
			}
			System.out.println("---------");
		}
		System.out.println(str.length+" 명 등록했습니다.");
		for (int i = 0; i < str.length; i++) {
			for (int j = 0; j < str[i].length; j++) {
				System.out.print(str[i][j]+ " ");
			}
		}
		
	}

}

 


Q9) 마방진 

package java0810;

import java.util.Scanner;

public class TestQ9 {

	public static void main(String[] args) {
		int arr[][];
		int num=1;
		int size=0;
		int x,y =0;
		System.out.println("홀 수만 입력 : ");
		Scanner scan = new Scanner(System.in);
		size = scan.nextInt();
		x= size/2; 					 // 무조건 x축 중앙에 1을 둠, 여기부터 시작됨
		arr= new int[size][size]; 	 // 가로 세로가 똑같은 테이블
		while (num<= size*size) {
			arr[y][x]=num;  		 // 0행 1열(y,x)에 1을 넣음
			if (num % size==0) {
				y++;
			}else {
				y--;
				x++;
			}
			if (y < 0) 
				y = size -1;
			
			if (x>=size) 
				x=0;
			    num++;
		}
		for (int i = 0; i < size; i++) {
			for (int j = 0; j < size; j++) {
				System.out.printf("%02d ", arr[i][j]);
			}
			System.out.println();
		}
		
	}
}


Q10) 워드 스크램블

package java0810;

import java.util.Random;
import java.util.Scanner;

class WordScramble{  // 정답을 반환 메써드
	String[] strArr= {"CHANGE", "LOVE", "HOPE", "VIEW", "APPLE"};
	String shake="";
	public String getAnswer() {
		int idx =new Random().nextInt(strArr.length);
		return strArr[idx];
	}
	public String getScrambledWord(String str) {  // 문제를 섞는 메써드
		int[] inArr = new int[str.length()];
		for (int i = 0; i < inArr.length; i++) {
			inArr[i]=new Random().nextInt(str.length());
			boolean check=false;
			for (int j = 0; j < i; j++) {
				if (inArr[i]==inArr[j]) {
					check=true;
					break;
				}
			}
			if (!check) {
				i++;
			}
		}
		for (int i = 0; i < str.length(); i++) {
			shake += str.charAt(inArr[i]);
		}
		return shake;
	}
}
public class TestQ10 {
	public static void main(String[] args) {
		WordScramble ws = new WordScramble();
		String answer = ws.getAnswer();
		String question = ws.getScrambledWord(answer);
		while (true) {
			System.out.print("단어를 입력하세요 : ");
			Scanner scan= new Scanner(System.in);
			String str =scan.next();
			if (str.equalsIgnoreCase(answer)) {
				System.out.println(str+"정답!!!!");
				break;
			}else {
				System.out.println(str+"오답....");
			}
		}
	}

}

Q11) 스테틱 변수 point 를가지는 Guide 클래스를 만들고, 이름과 성별 정보를 갖는 Guest클래스를 만들어 아래의 결과가 나오도록 하는 로직을 구형해보자. 최초 실행시 등록할 관광객 수를 지정. 지정한 수 만큼 Guest클래스의 배열을 만들도록 한다.

관광객수 :2
관광객 등록
1.이름: 홍길동
1.성별: 남
---------------
2.이름: 홍길순
2.성별: 여
-----------------
이름등록이 완료 되었다면 아래의 메뉴가 출력된다.
1.관광객 정보
2.목적지 변경
3. 종료
선택>>1

package java0810;

import java.util.Scanner;

class Guide{
	static String point;
	Guest[] guest;  // Guest 클래스가 생성될 때까지 오류 보임
	public Guide(int n) {
		point = "가거도";  // 초기화 
		guest = new Guest[n];
		for (int i = 0; i < guest.length; i++) {
			guest[i]=new Guest();
		}
	}
}
class Guest{
	private String name, gender;  // Getter와 Setter를 이용해서 메써드 생성
	public String getPoint() {
		return Guide.point;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
}

public class TestQ11 {

	public static void main(String[] args) {
		System.out.print("관광객의 수 : ");
		Scanner scan=new Scanner(System.in);
		int n = scan.nextInt();
		Guide guide=new Guide(n);
		System.out.println("관광객 등록");
		for (int i = 0; i < n; i++) {
			System.out.print(i+ 1 +". 이름 : ");
			guide.guest[i].setName(scan.next());
			System.out.print(i+ 1 +". 성별 : ");
			guide.guest[i].setGender(scan.next());
			System.out.println("-------------");
		}
		outer: while (true) {
			System.out.println("1. 관광객 정보");
			System.out.println("2. 목적지 변경");
			System.out.println("3. 종료");
			System.out.print("선택>>");
			int select = scan.nextInt();
			switch (select) {
			case 1: 
				for (int i = 0; i < n; i++) {
					System.out.println(i+1+". 이름 : "+guide.guest[i].getName());
					System.out.println(i+1+". 성별 : "+guide.guest[i].getGender());
					System.out.println(i+1+". 목적지 : "+guide.guest[i].getPoint());
					System.out.println("-------------");
				}
				break;
			case 2:
				System.out.print("어디로 변경할까요???");
				Guide.point = scan.next();
				System.out.println(Guide.point+ "로 목적지 변경");
				System.out.println("-------------");
				break;
			
			default:
				System.out.println("종료");
				break outer;
			}
		}
	}

}


Q12) 배열 arr안에 10, 20, 30, 40, 50을 넣어서 초기화 한뒤, 이 모든 값을 더하는 프로그램을 작성하시오.

package java0810;

public class TestQ12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[] = {10, 20, 30, 40, 50};
		int result = 0;
		for (int i = 0; i < arr.length; i++) {
			result += arr[i];
		}
		System.out.println("모두 합한 결과 : " + result);
	}

}

 


Q13)WordGame이라는 쓰레드가 ArrayList에 3초마다 미리 준비되어 있는 단어를 하나씩 추가하고, 사용자가 단어를 입력하면 ArrayList에서 일치하는 단어를 삭제하도록 하는 프로그램을 만들어 보자.

package java0810;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

class WordGame extends Thread{
	private ArrayList<String> arr;
	private String[] data;
	private boolean isPlaying =true;
	public WordGame(ArrayList<String> arr, String[] data) {  // 생성자 
		this.arr =arr;
		this.data = data;
	}
	public void setPlaying(boolean isPlaying) {  			// 메써드 생성
		this.isPlaying = isPlaying;
	}
	@Override
	public void run() {
		while (isPlaying) {
			int rand = new Random().nextInt(data.length);
			arr.add(data[rand]);   // 데이터를 추가 
			try {
				Thread.sleep(3000);
			} catch (Exception e) {
			}
		}
	}
}


public class TestQ13 {
	public static void main(String[] args) {
		ArrayList<String> arr = new ArrayList<String>(); // 생성자를 통해서 객체 생성
		String[] data= {"apple", "banana", "orange", "grape", "strawberry", "pineapple"};
		WordGame wg = new WordGame(arr, data);
		wg.start(); 	// 쓰레드 시작
		try {
			Thread.sleep(100);
		} catch (Exception e) {
		}
		while (true) {
			if (arr.size()==0) {
				System.out.println("클리어");
				wg.setPlaying(false);   // 쓰레드 종료
				break;
			}
			System.out.println(arr);
			System.out.print(">> ");
			Scanner scan = new Scanner(System.in);
			String in= scan.next();
			for (int i = 0; i < arr.size(); i++) {
				if (in.equals(arr.get(i))) {
					arr.remove(i);
				}
			}
		}
	}

}


 

'JAVA' 카테고리의 다른 글

[JAVA] 재귀 호출  (0) 2022.08.10
[JAVA] 문제 풀이 0809  (0) 2022.08.09
[JAVA] JDBC  (0) 2022.08.09
[JAVA] Server Socket 서버 클라이언트 프로그램 만들기  (0) 2022.08.08
[JAVA] IO < 버퍼>, < byte stream>, <Char stream>  (0) 2022.08.08

댓글