교육 13일~15일

권재현·2021년 4월 4일
0

교육

목록 보기
11/49

13일 부터 15일은 4월5일 식목일 날 볼 자바 시험를 대비하기 위해 실습문제을 푸르나 정신이 없었다. 사실 문제 문제를 많이 못풀어서 올릴게 없었다. ㅋㅋㅋ다행히 오늘 까지 해서 6문제 중 5문제를 겨우겨우 풀어내 다시 복기 할겸 쓰고 있다. 못푼 문제는 문제풀이에 올리면서 다시 세세하게 공부해볼 예정이다.
나의 풀이와 선생님의 풀이를 비교해볼 예정이다.

1.주사위

public class ProblemDice {

	public static void main(String[] args) {
	Scanner sc = new Scanner(System.in); 
	//1.원하는 주사위 와 주사위 개수를 입력 받아 
    	//그 결과를 확인하는 프로그램을 구현하시오.
	System.out.println("원하는 주사위를 입력해주세요");
	int dicenum= sc.nextInt(); //원하는 주사위 면체
	System.out.println("주사위는 "+dicenum+"면체입니다");
	
	System.out.println("원하는 주사위개수를 입력해주세요");
	int cnt=sc.nextInt();
	System.out.println("주사위는"+cnt+"번굴려야 합니다.");
	
	for(int i = 0; i<cnt; i++) {
    	//다이스 숫자 랜덤으로 나오게하기
        //랜덤 숫자 형식 : Math.floor(Math.random()*숫자범위)+시작번호;
		//int dice=(int) Math.floor(Math.random()*dicenum)+1;
		
        int dice=(int) (Math.random()*dicenum)+1;
		System.out.println(dice);
	}

}

선생님 답

	//스캐너
		Scanner sc = new Scanner(System.in);
		boolean flag =  true;
		while(flag) {
			System.out.println("1.시작 \t2.종료");
			String menu = sc.nextLine();
			
			switch(menu) {
			case "1":
				int dice ;
				int cnt ;
				//주사위 종류입력
	while(true) {
	System.out.println("주사위 종류를 입력하세요.(숫자만 입력하세요.)");
			try {
				dice = Integer.parseInt(sc.nextLine());
					break;
				} catch (Exception e) {
					e.printStackTrace();
				}
		}
		//주사위 개수 입력
	while(true) {
	System.out.println("주사위 개수를 입력하세요.(숫자만 입력하세요.)");
			try {
			cnt= Integer.parseInt(sc.nextLine());
				break;
			} catch (Exception e) {
				e.printStackTrace();
				}
		}
		for(int i= 0; i < cnt; i++) {
	System.out.println((int)(Math.floor(Math.random()* dice))+1);
			}
			break;
		case "2": 
			flag=false;
			System.out.println("종료합니다.");
			break;
		default : 
			System.out.println("잘못입력했습니다.");
				
			}
		}

2. 로또

//2. 원하는 개수를 입력받고 그 개수 만큼 로또 번호를 생성하는 프로그램을 구현하시오.
	System.out.println("원하는 로또 횟수");
	int times =sc.nextInt(); //횟수
	int[] lotto =new int[6]; //로또 번호 생성
	
for(int k =0; k<times; k++) { //로또 횟수 생성 
	for(int i = 0; i<lotto.length; i++) {//로또 번호 1번부 6번까지 생성
	lotto[i]=(int)(Math.random()*6)+1;
		for(int j =0; j <i; j++) { 
        //출력되는 번호와 0번부터 출력번호 전까지 비교
			if(lotto[i]==lotto[j]) {//비교 조건
			i--; //중복되는 해당번호 다시 출력
			}
		}
	}
System.out.println("로또 번호는"+lotto[0]+","+lotto[1]+","+lotto[2]+","
		+lotto[3]+","+lotto[4]+","+lotto[5]);
		}
	}
}

이번에 다시 풀면서 1시간 넘게 고민했고, 결국 푸는데 실패했다. 처음 문제 풀었을 때 바로 풀었던 문제라 자신에게 화가났다.ㅋㅋㅋㅋfor문에 대해 이해가 아직도 부족하구나 라는 생각을 하겠됐다.ㅜㅜ 지나간 문제도 다시보자라는 생각을 하게된다.

선생님 답

switch(menu) {
		case "1" :
			int cnt = 0;
			//로또 개수 입력
	while (true) {
	System.out.println("로또 개수를 입력하세요. (숫자만 입력하세요.)");
		try {
		cnt= Integer.parseInt(sc.nextLine());
			break;
		} catch(Exception e) {
			e.printStackTrace();
				}
			}
			
	int[] lotto= new int [6];
		for(int i = 0; i < cnt; i++) {
			for(int k = 0; k < 6; k++) {
				//로또 번호 출력
		lotto[k] = (int)Math.floor(Math.random()*45)+1;
				
			for(int j = 0; j < k ; j++) {
				//중복 값 체크
				if(lotto[k] == lotto[j]) {
					k--;
					break;
				}
			}
		}
		//오름 차순 정렬
		Arrays.sort(lotto);
		//로또 번호 toString으로 출력
		System.out.println(Arrays.toString(lotto));
			}
			break;
		case "2":
		//while문 종료 만들기
		flag = false;
			System.out.println("종료합니다.");
			break;
		
		default: 
		//디풜트 1번이나 2번 아닌 숫자 입력시 발생
			System.out.println("잘못 입력했습니다.");
		}
	}

내 정답과 비교해서는 예외처리는 하는 try, catch문가 추가 된건데 왜 이렇게 복잡해 보일까? ㅋㅋㅋㅋ

3. 책

//3. 다음 데이터 맞추어 데이터를 입력받고 정렬 순서를 입력받아 정렬된 순서대로 출력하는 프로그램을 구현하시오.
	//데이터 : 책번호, 책 제목, 저자, 발행일, 출판사
	
	List<HashMap<String, String>> book	
	= new ArrayList<HashMap<String, String>>();
	boolean flag = true;
	while(flag) {
		HashMap<String, String> data = new HashMap<String, String>();

		System.out.println("문제 3번을 진행하세요");		
		System.out.println("1. 책입력\t2.책  정렬\t3.정렬\t5.종료");
			String input = sc.nextLine();
			switch(input) {
			
		case "1" :
			System.out.println("책번호를 입력해주세요");
			int booknum=sc.nextInt();
			sc.nextLine();
			data.put("책번호",Integer.toString(booknum));
			
			System.out.println("책이름를 입력해주세요");
			String bookname=sc.nextLine();
			data.put("책이름",bookname);
			
			
			System.out.println("책 저자를 입력해주세요");
			String writer=sc.nextLine();
			data.put("저자",writer);
	
			
			System.out.println("책 발행일을 입력해주세요");
			int date=sc.nextInt();
			sc.nextLine();
			data.put("발행일",Integer.toString(date));
			
			System.out.println("출판사를 입력해주세요");
			String company=sc.nextLine();
			data.put("출판사",company);
	
			
			book.add(data);
			break;
			
		case "2":
			HashMap<String, String> temp ;
			System.out.println("1.오름차순\t 2.내림차순");
			String input2 = sc.nextLine();
			switch(input2) {
			
		case "1": //오름차순
		for(int i=0; i<book.size()-1; i++) {
			for(int j =i+1; j<book.size(); j++) {
		//"책번호가 스트링이라서 비교를 위해 인트로 형변환		
		if(Integer.parseInt(book.get(i).get("책번호")) > 
       		 Integer.parseInt(book.get(j).get("책번호"))) {
				temp = book.get(i);
				book.set(i, book.get(j));
				book.set(j, temp);
					}
				}
			}		
			break;
		case "2": //내림차순
			for(int i=0; i<book.size()-1; i++) {
			for(int j =i+1; j<book.size(); j++) {
			//"책번호가 스트링이라서 비교를 위해 인트로 형변환		
	if(Integer.parseInt(book.get(i).get("책번호")) <  
   			Integer.parseInt(book.get(j).get("책번호"))) {
				temp = book.get(i);
				book.set(i, book.get(j));
				book.set(j, temp);
						}
					}
				}
				break;
			}		
			break;
			
	case "3":
		System.out.println("순번 정렬");
		for(HashMap<String, String> name : book) {
	System.out.println(name.get("책이름")+"\t"+name.get("책번호")+"\t"
    	+name.get("저자")+"\t"+name.get("발행일")+"\t"+name.get("출판사"));
				}
			break;
			
	case "5":
		System.out.println("종료합니다.");
		flag=false;
		break;
		default:
		System.out.println("잘못입력하셨습니다.");
			}
			
		}
	}
}

선생님 답

 Scanner sc = new Scanner(System.in);
		 boolean flag= true;
		 List<HashMap<String, String>> books = new ArrayList<HashMap<String,String>>();
		while(flag) {
		System.out.println("1.추가\t2.정렬 \t3.조회\t9.종료");
			String menu = sc.nextLine();
			
			switch(menu) {
			case "1":
				while(true) {
				try {
			//while문 돌 때 마다 HashMap 타입 book탄생
		HashMap<String, String>book
        		= new HashMap<String, String>();
		System.out.println("책번호를 입력하세요");
		book.put("no", sc.nextLine());
		//String 값으로 받아서 Int로 변환해준다.
        
		Integer.parseInt(book.get("no"));
		System.out.println("책제목을 입력해주세요");
		book.put("title", sc.nextLine());
        
		System.out.println("작성자를 입력해주세요");
		book.put("writer", sc.nextLine());
        
		System.out.println("발행일을 입력해주세요");
		book.put("date", sc.nextLine());
        
		System.out.println("출판사를 입력해주세요");
		book.put("company", sc.nextLine());
						
		books.add(book);
        
		//try문 끝나면 꼭  break; 사용
			break;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("잘못입력하셨습니다.");
				e.printStackTrace();
					}//catch
				}
			break;
	case "2":
		boolean sflag = true;
		while(sflag) {
		//book이 HashMap이기에 비교하는 temp도 같은 타입으로 만들어서비교
		HashMap<String, String>temp;
		System.out.println("1.오름차순 \t2.내림차순");
		switch(sc.nextLine()) {
        
	case "1":
		for(int i =0; i < books.size()-1; i++) {
		for(int j =0; j <books.size(); j++) {
//String으로 받는 books int로 변환 books 리스트 안에 있는 0번째 에서 키값 꺼내오기
				//내림차순으로 조건문 반대로 
	if(Integer.parseInt(books.get(i).get("no"))>
		Integer.parseInt(books.get(j).get("no"))){
				temp = books.get(i);
				books.set(i, books.get(j));
				books.set(j, temp);
						}
					}
				 }
					sflag= false;
					break;
	case "2":
		for(int i = 0; i < books.size() -1; i++) {
			for(int j = i+1; j < books.size(); j++) {
			if (Integer.parseInt(books.get(i).get("no")) 
				< Integer.parseInt(books.get(j).get("no"))) {
					temp = books.get(i);
					books.set(i, books.get(j));
					books.set(j, temp);}
				}//두번째 for문	
		}//첫번 째 for문
				sflag = false;
				break;
				default : 
				System.out.println("잘못입력하셨습니다.");
				}
			}
				break;
				
	case "3":
		System.out.println("책번호\t책제목\t저자\t발행일\t출판사");
		for(HashMap<String, String> book: books) {
		System.out.println(book.get("no")+" "+book.get("title")+" "+book.get("writer")+" "
			+book.get("date")+" "+book.get("company"));
				}
		break;
	case "9":
		flag = false;
		System.out.println("종료합니다.");
		break;
		default:
		System.out.println("잘못입력했습니다.");
		}
	}

4.냉장고

Scanner sc = new Scanner(System.in);
// 문제4 다음조건에 해당하는 냉장고 프로그램을 구현하시오.
	/*
	* 조건1. 냉장고 총 크기는 50 조건
	* 조건2. 냉장고에 넣을 수 있는 품목은 계란(크기 1, 유통기한 3일), 
    	우유(크기3, 유통기한 5일),수박(크기 5,유통기한 7일)
  	* 조건3. 냉장고에 집어넣고 유통기한이 지날 경우 자동페기됨
	* 조건4. 날짜는 다음날로 이동기능을 구현하여 한번에 1일씩 지나가게 구현 
	* 조건5. 냉장고에 품목 추가 시 50의 크기를 넘게 될 경우 냉장고 보관 불가능 
	* 조건6. 하루에 집어 넣을수있는 품목의 상한의 없음 조건 조건
	* 조건7. 현재 보관 품목과 유통기한을 확인 할 수 있는 조회기능 구현
		 */
	// 냉장고 총 크기는 50
	int size = 50;
	boolean flag= true;
			
	List<Integer>egg=new ArrayList<>();
	List<Integer>milk=new ArrayList<>();
	List<Integer>watermelon=new ArrayList<>();
	while(flag) {
		System.out.println("1.품목담기\t2.다음날\t3.상태체크\t4.종료");
		String menu=sc.nextLine();
	int fridge= (egg.size()*1)+(milk.size()*3)+(watermelon.size()*5);
				switch(menu) {
				
				case "1":
	System.out.println("무엇을 담으시겠습니까? 1.계란\t2.우유\t3.수박");
			String product=sc.nextLine();
			switch(product) {
					
		case "1":
	//비어있어야 넣을 수 있기에 먼저 냉장고 용량 체크를 if로 해줘야한다.
			if(fridge+1<=50) {
					egg.add(3);
			System.out.println("계란 개수 : "+egg.size());
			System.out.println("냉장고 용량 : "+(fridge+1));
			}
			else {
		System.out.println("50을 넘어서 추가로 담을 수 없습니다.");
			flag=false;
				}
			break;
					
		case "2":
						
			if(fridge+3<=50) {
					milk.add(5);
		System.out.println("우유 개수 : "+milk.size());
		System.out.println("냉장고 용량 : "+(fridge+3));
					}
				else {
	System.out.println("50을 넘어서 추가로 담을 수 없습니다.");
				flag=false;
				}
				break;
					
	case "3":
					
				if(fridge+5<=50) {
					watermelon.add(7);
		System.out.println("수박 개수 : "+watermelon.size());
		System.out.println("냉장고 용량 : "+(fridge+5));
						
				}
				else {
System.out.println("50을 넘어서 추가로 담을 수 없습니다.");
				flag=false;
				}
			break;
			}
			break;
	case "2": //유통기한
		System.out.println("다음날입니다.");
		for(int i =0; i < egg.size(); i++) {
			egg.set(i, egg.get(i)-1);
	System.out.println("계란남은 유통기한 :"+egg.get(i)+"일 남았습니다");
            
				if(egg.get(i)==0) {
				System.out.println("계란을 페기합니다.");
				egg.remove(i);
				i--;
			break;
					}
				}	
		for(int i =0; i < milk.size(); i++) {
			milk.set(i, milk.get(i)-1);
	System.out.println("우유남은 유통기한 : "+milk.get(i)+"일 남았습니다");
					
				if(milk.get(i)==0) {
				System.out.println("우유을 페기합니다.");
				milk.remove(i);
					i--;
				break;
				}
			}	
	for(int i =0; i < watermelon.size(); i++) {
		watermelon.set(i, watermelon.get(i)-1);
System.out.println("우유남은 유통기한 : "+watermelon.get(i)+"일 남았습니다");
					
			if(watermelon.get(i)==0) {
			System.out.println("우유을 페기합니다.");
			watermelon.remove(i);
			i--;
			break;
				}
			}	
			break;
		case "3":
			System.out.println("냉장고 상태체크");
			System.out.println("egg 개수 확인"+egg.size());
			System.out.println("milk개수 확인"+milk.size());
			System.out.println("watermelon개수 확인"+watermelon.size());
			break;
		case "4":
			System.out.println("종료합니다");
			flag = false;
			break;
		default: 
			System.out.println("잘못 입력하셔습니다.");
		}
	}

선생님 답

int fSize = 50; // 냉장고 사이즈
	
	String[] product = { "계란","우유","수박"};
	int[] pSize = {1, 3 ,5};//크기
	int[] pDay = {3, 5, 7}; //유통기한
List<HashMap<String, Integer>> fridge 
			=new ArrayList<HashMap<String, Integer>>();
	
	boolean flag = true;
	Scanner sc = new Scanner(System.in);
	while(flag) {
		System.out.println("1.넣기\t2.상태확인\t3.다음날\t4.종료");
		
		switch(sc.nextLine()) {
	case "1":
	boolean iFlag = true;
	while(iFlag) {
				//상품의 크기,유통기한을 다 보여줌
for(int i= 0; i< product.length; i++) {// product.length 길이는 3
		System.out.println(i+ 1+ "."+ product[i]
			+"(크기 :	"+pSize[i]	
			+ ", 유통기한 : "+pDay[i]+ ")\t");
				}
		System.out.println();
			try {
		
			int num = sc.nextInt();
			sc.nextLine();
					
			int sum =0; //크기 총합
					
		for(int i = 0; i< fridge.size(); i++) {
			sum += pSize[fridge.get(i).get("no")];
					}
					
			if(sum + pSize[num -1] <= 50) {
	HashMap<String, Integer> p =new HashMap<String, Integer>();
			p.put("no", num-1); //크기
			p.put("day", pDay[num-1]); //유통기한
					
			fridge.add(p); //냉장고에 크기, 유통기한 담는다.
				} else { 
		System.out.println("냉장고 크기를 벗어났습니다.(현재 : " 
					+ sum + "/" + fSize + ")");
					}
				
			iFlag = false;
			} catch(Exception e ) {
			System.out.println("잘못입력하셨습니다.");
			e.printStackTrace();
		}
				
	}
		
			
			break;
	case "2":
			System.out.println("냉장고 상태");
			System.out.println("==================");
		for(int i = 0; i < fridge.size(); i++) {
	System.out.println(product[fridge.get(i).get("no")]
			+"("+ fridge.get(i).get("day")+ "일남음)");
			}
			break;
	case "3": //다음날
		for(int i= 0; i < fridge.size(); i++) {
            
		fridge.get(i).put("day", fridge.get(i).get("day")-1);
			if(fridge.get(i).get("day") == 0) {
			fridge.remove(i);
				i--; 
  // 리스트 형식의 i번째 fridge가 제거 되면 바로 위에 있던, 내려오기에 
                 //그것을 검사하기 위해서 i--를 해줘야한다.
			}
		}
		break;
	case "4":
		System.out.println("종료합니다");
		flag = false;
		break;
		default :
			System.out.println("잘못 입력하셨습니다.");
		
		}
	}

진짜 중요한 지하철과 수족관은 문제풀이에서 풀이하면서 정리하자.
이번주도 어떻게 흘러간지 모르겠다. 벌써 다음주면 3주차인데, 시간이 정말 빠르게 흘러간다.
후회하지않기 최선은 기본이고, 내 자신과의 약속을 지키는 게 중요하다.

profile
호텔리어 출신 비전공자

0개의 댓글