728x90
탐욕 알고리즘(Greedy algorithm)
여러 경우 중에서 하나를 결정해야할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는것
// 금액을 입력받아 화폐단위대로 분리해서 표시(5만원권, 1만원권, 5천원권, 1천원권) (단, / , % 만 사용할 것)
// 187,000원을 입력받아서다면 5만원권 3장, 1만원권 3장, 5천원권 1장, 1천원권 2장.
System.out.println("금액을 입력하세요.");
int price = sc.nextInt();
System.out.println("입력받은 금액 " + price);
int oman = price/50000;
int ilman = (price%50000)/10000;
int ochun = ((price%50000)%10000)/5000;
int ilchun = (((price%50000)%10000)%5000)/1000;
System.out.println("5만원권 " + oman + "장");
System.out.println("1만원권 " + ilman + "장");
System.out.println("5천원권 " + ochun + "장");
System.out.println("1천원권 " + ilchun + "장");
//금액을 입력받아 화폐, 동전을 분리해서 표시
System.out.println("금액을 입력하세요.");
int m = sc.nextInt();
int money50000 = money /50000;
int money10000 = money%50000/10000;
int money5000 = money%50000%10000/5000;
int money1000 = money%50000%10000%5000/1000;
int money500 = money%50000%10000%5000%1000/500;
int money100 = money%50000%10000%5000%1000%500/100;
int money50 = money%50000%10000%5000%1000%500%100/50;
int money10 = money%50000%10000%5000%1000%500%100%50/10;
System.out.println("5만원 " + money50000 + "장");
System.out.println("1만원 " + money10000 + "장");
System.out.println("5천원 " + money5000 + "장");
System.out.println("1천원 " + money1000 + "장");
System.out.println("5백원 " + money500 + "개");
System.out.println("1백원 " + money100 + "개");
System.out.println("5십원 " + money50 + "개");
System.out.println("1십원 " + money10 + "개");
조건문
if-else 문
//나이가 8세 이상이면 학교에 다닌다 그렇지 않으면 학교에 다니지 않는다.
int age = 7;
if (age >= 8) {
System.out.println("학교에 다닙니다.");
} else {
System.out.println("학교에 다니지 않습니다.");
}
if else if else문
조건이 여러개인 경우 맞는 조건을 수행하고 끝내는 구문이다.
형식 if(조건식){조건이 참일 때 수행할 내용}
else if(조건식) {조건이 참일 때 수행할 내용}
else {물어보지 않는 모든 조건 수행 내용}
int age = 9;
int charge;
if(age<8){
charge=1000;
System.out.println("취학 전 아동");
} else if(age<14) {
charge=2000;
System.out.println("초등학생");
} else if(age<20) {
charge=2500;
System.out.println("중˙고등학생");
} else {
charge=3000;
System.out.println("일반인");}
System.out.println("요금은 "+ charge +"원 입니다.");
//키보드로 입력받아서 출력
System.out.println("나이를 입력하세요.");
int age = sc.nextInt();
int charge;
if(age<8){
charge=1000;
System.out.println("취학 전 아동입니다.");
} else if(age<14) {
charge=2000;
System.out.println("초등학생입니다.");
} else if(age<20) {
charge=2500;
System.out.println("중˙고등학생입니다.");
} else {
charge=3000;
System.out.println("일반인입니다.");
}
System.out.println("요금은 "+ charge +"원 입니다.");
//이 경우 음수나 1000을 입력해도 값이 입력된다.
//수정 : 나이가 0살미만과 150살 이상일 경우 "나이를 잘 못 입력하였습니다."라고 출력되게해보자
System.out.println("나이를 입력하세요.");
int age = sc.nextInt();
int charge = 0;
if((age>0) && (age<=7)){
charge=1000;
System.out.println("취학 전 아동입니다.");
} else if((age>=8) && (age<=13)) {
charge=2000;
System.out.println("초등학생입니다.");
} else if((age>=14) && (age<=19)) {
charge=2500;
System.out.println("중˙고등학생입니다.");
} else if((age>=20) && (age<=150)){
charge=3000;
System.out.println("일반인입니다.");
} else {
System.out.println("나이를 잘못 입력하였습니다.");
}
System.out.println("요금은 "+ charge +"원 입니다.");
//95점 이상 A+, 90점 이상 A, 85점 이상 B+, 80점 이상 B, 70점 이상 C, 60점이상 D, 나머지 점수 "재시험"
int score = sc.nextInt();
String grade="";
if (score>=95 && score<101) {
grade = "A+";
} else if(score>=90 && score<95) {
grade = "A";
} else if(score>=85 && score<90) {
grade = "B+";
} else if(score>=80 && score<85) {
grade = "B";
} else if(score>=70 && score<80) {
grade = "C";
} else if(score>=60 && score<70) {
grade = "D";
} else if (score>=0 && score<60){
grade = "재시험";
} else {
grade = "점수를 잘못 입력하였습니다.";
}
System.out.println(grade);
연산자가 있을 때 괄호로 묶어주는 습관
//혈액형
System.out.println("혈액형을 입력해주세요");
char blood = sc.next().charAt(0);
if (blood == 'A') {
System.out.println("A형");;
} else if (blood=='B') {
System.out.println("B형");;
} else if (blood=='O') {
System.out.println("O형");
} else {
System.out.println("AB형");}
문제가 생긴다. 수정을하면 아래와 같다.
System.out.println("혈액형을 입력해주세요");
String blood = sc.nextLine();
if (blood.equals("A")) {
System.out.println("A형");;
} else if (blood.equals("B")) {
System.out.println("B형");;
} else if (blood.equals("O")) {
System.out.println("O형");
} else {
System.out.println("AB형");}
이러한 문제점이 발생하는데 다시 재수정하면
System.out.println("혈액형을 입력해주세요");
String blood = sc.nextLine();
if (blood.equals("A")) {
System.out.println("A형");;
} else if (blood.equals("B")) {
System.out.println("B형");;
} else if (blood.equals("O")) {
System.out.println("O형");
} else if (blood.equals("AB")) {
System.out.println("AB형");
} else {
System.out.println("혈액형을 잘못입력하였습니다.");}
여기서 또 문제점이 발생하는 데 그림 11과 같다
System.out.println("혈액형을 입력해주세요");
String blood = sc.nextLine();
if ((blood.equals("A")) || (blood.equals("a"))) {
System.out.println("A형");;
} else if ((blood.equals("B")) || (blood.equals("b"))) {
System.out.println("B형");;
} else if ((blood.equals("O")) || (blood.equals("o"))) {
System.out.println("O형");
} else if ((blood.equals("AB")) || (blood.equals("ab"))) {
System.out.println("AB형");
} else {
System.out.println("혈액형을 잘못입력하였습니다.");
}
// 또는
System.out.println("혈액형을 입력해주세요");
String blood = sc.nextLine();
String str;
if ((blood.equals("A")) || (blood.equals("a"))) {
str = "A형";
} else if ((blood.equals("B")) || (blood.equals("b"))) {
str = "B형";
} else if ((blood.equals("O")) || (blood.equals("o"))) {
str = "O형";
} else if ((blood.equals("AB")) || (blood.equals("ab"))) {
str = "AB형";
} else {
str = "잘못 입력하였습니다.";}
System.out.println(str);
중첩 if문
if문 내에 if문으로 구성. 처음 if문의 조건이 맞지 않으면 if문 내의 if문을 수행하지 않는다.
if문이 참이어야 if문 안 if문이 수행 가능 대표적인 예로는 id가 맞아야 pw를 입력할 수 있는 것이 있다.
//
int math = 70;
int eng = 55;
if(math>=70) {
if(eng>=60) {
System.out.println("pass");
}
else {
System.out.println("fail");}
}
//fail이 출력
// 로그인 예제 id:abcde, pw:12345
String id, pw;
System.out.println("ID를 입력하세요");
id = sc.nextLine();
if(id.equals("abcde")) {
System.out.println("ID가 일치합니다.");
System.out.println("PW를 입력하세요");
pw = sc.nextLine();
if(pw.equals("12345")) {
System.out.println("비밀번호가 일치합니다.");
System.out.println("로그인 성공");
}
else {
System.out.println("비밀번호가 틀립니다.");
}
} else {
System.out.println("ID를 확인해주세요.");
}
728x90
'KDT > Java' 카테고리의 다른 글
231113 Java (0) | 2023.11.13 |
---|---|
231109 Java - 조건문3 (0) | 2023.11.09 |
231106 Java - 연산자 2, 조건문 1 (0) | 2023.11.06 |
231102 Java - 연산자 1 (0) | 2023.11.02 |
231101 Java - Scanner 클래스 2 (0) | 2023.11.01 |