13일 부터 15일은 4월5일 식목일 날 볼 자바 시험를 대비하기 위해 실습문제을 푸르나 정신이 없었다. 사실 문제 문제를 많이 못풀어서 올릴게 없었다. ㅋㅋㅋ다행히 오늘 까지 해서 6문제 중 5문제를 겨우겨우 풀어내 다시 복기 할겸 쓰고 있다. 못푼 문제는 문제풀이에 올리면서 다시 세세하게 공부해볼 예정이다.
나의 풀이와 선생님의 풀이를 비교해볼 예정이다.
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. 원하는 개수를 입력받고 그 개수 만큼 로또 번호를 생성하는 프로그램을 구현하시오.
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. 다음 데이터 맞추어 데이터를 입력받고 정렬 순서를 입력받아 정렬된 순서대로 출력하는 프로그램을 구현하시오.
//데이터 : 책번호, 책 제목, 저자, 발행일, 출판사
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("잘못입력했습니다.");
}
}
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주차인데, 시간이 정말 빠르게 흘러간다.
후회하지않기 최선은 기본이고, 내 자신과의 약속을 지키는 게 중요하다.