1번 문제
- 이중 for looping을 사용하여 구구단을 출력해야 하는 문제
- 출력 형식이 1 * 1 = 1 2 * 1 = 2 3 * 1 = 3 ... 형식으로 되어있어 내부 루프를 도는 인자가 먼저 출력되도록 설정하기만 하면 지극히 기본적인 구구단 출력 문제이다.
public class JavaStudy01 {
public static void main(String[] args){
for (int i = 1; i < 10; i++){
for (int j = 1; j < 10; j++){
System.out.print(String.format("%02d", j) + " x " + String.format("%02d", i) + " = " + String.format("%02d", i * j) + "\t");
}
System.out.println();
}
}
}
2번 문제
- 입력으로 받은 금액에 대한 캐시백을 구하는 문제이다
- 캐시백은 입력으로 받은 금액의 10%가 적립되며, 300원이 넘을 수 없고, 백원 단위로 끊긴다. 즉 230원, 251원 등이 캐시백이 될 수 없다는 것이다.
- 먼저 입력의 10%를 먼저 계산한 다음, 300원이 넘을 시 300원으로 고정하고 그렇지 않을 시 100으로 나누어떨어지는지 확인한 후 100 * (캐시백 금액 / 100)으로 하면 캐시백 요금을 구할 수 있다.
import java.util.Scanner;
public class JavaStudy02 {
public static void main(String[] args){
System.out.println("[캐시백 계산]");
System.out.print("결제 금액을 입력해 주세요.(금액):");
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
int payback = (int)(money * 0.1);
if (payback > 300){
payback = 300;
} else{
if (payback % 100 != 0){
payback = (payback / 100) * 100;
}
}
System.out.printf("결제 금액은 %d원이고, 캐시백은 %d원 입니다.", money, payback);
}
}
3번 문제
- 나이, 입장시각, 국가유공자 여부와 복지카드 여부를 입력으로 받아 입장료를 계산해야 한다.
- 이때 3세 미만이면 무료이며, 복지카드와 국가유공자는 8천원이다
- 만약 나이가 13세 미만이면 특별 할인으로 4천원이 되며 17시 이후에 입장하면 역시 4천원이 된다.
- 8천원이 적용되는지부터 먼저 따져본다. 초기 입장료는 1만원이다.
- 국가유공자나 복지카드가 있다면 8천원이 적용가능하므로 8천원으로 가격을 바꾼다.
- 이후 나이가 13세 미만이거나 입장 시간이 17시 이후인지를 검사한다. 조건에 맞다면 가격을 4천원으로 바꾼다.
- 이후 나이가 3세 미만인지 검사한다. 3세 미만인 경우 0원으로 변경한다.
- 해당 로직으로 짠 코드는 다음과 같다.
import java.util.Scanner;
public class JavaStudy03 {
public static void main(String[] args){
System.out.println("[입장권 계산]");
System.out.print("나이를 입력해 주세요.(숫자):");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
System.out.print("입장시간을 입력해 주세요.(숫자입력):");
int hour = sc.nextInt();
System.out.print("국가유공자 여부를 입력해 주세요.(y/n):");
char is_merit = sc.next().charAt(0);
System.out.print("복지카드 여부를 입력해 주세요.(y/n):");
char has_card = sc.next().charAt(0);
int result = 10000;
if (is_merit == 'y' || has_card == 'y'){
result = 8000;
}
if (hour > 17 || age < 13){
result = 4000;
if (age < 3){
result = 0;
}
}
System.out.printf("입장료: %d\n", result);
}
}
4번 문제
- 생 년 월 일과 성별을 이용하여 주민등록번호를 만드는 프로그램
- 주민등록번호의 뒷 자리의 경우 2020년 기준으로 변경된 성별 코드 + 무작위 6자리 수를 사용하여 만들어야 한다.
- 성별 코드는 다음과 같은 기준으로 나뉜다.
- 1800 ~ 1899년 출생자인 경우, 남자는 9, 여자는 0으로 설정한다.
- 1900 ~ 1999년 출생자인 경우, 남자는 1, 여자는 2로 설정한다.
- 2000 ~ 2099년 출생자인 경우, 남자는 3, 여자는 4로 설정한다.
- 나머지 랜덤값은 Random 클래스를 사용하여 구현하면 끝이다.
import java.util.Scanner;
import java.util.Random;
public class JavaStudy04 {
public static void main(String[] args){
System.out.println("[주민등록번호 계산]");
System.out.print("출생년도를 입력해 주세요.(yyyy):");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
System.out.print("출생월을 입력해 주세요.(mm):");
int month = sc.nextInt();
System.out.print("출생일을 입력해 주세요.(dd):");
int day = sc.nextInt();
System.out.print("성별을 입력해 주세요.(m/f):");
char gender = sc.next().charAt(0);
if (gender != 'm' && gender != 'f'){
System.out.println("성별 포멧이 잘못되었습니다.");
return;
}
int gender_val = -1;
if (year < 1800){
System.out.println("해당 출생년도 범위의 사람에게는 해당되는 번호가 존재하지 않습니다.");
return;
} else if (year < 1900){
gender_val = gender == 'm' ? 9 : 0;
} else if (year < 2000){
gender_val = gender == 'm' ? 1 : 2;
} else if (year < 2100){
gender_val = gender == 'm' ? 3 : 4;
}
Random random = new Random();
int backNum = random.nextInt(1000000);
String front = String.format("%02d", year % 100) + String.format("%02d", month) + String.format("%02d", day);
String back = String.format("%d", gender_val) + String.format("%06d", backNum);
System.out.println(front + "-" + back);
}
}
정리
- 가장 기초적인 자바문법을 사용하는 과제였다. 구현에 어려움은 없었고, 어떻게 효율적으로 짤지에 대해 고민했던것 같다.
- 가장 어려웠던 점은 포멧에 맞춰 출력을 지정하는 것이었다.
'Java' 카테고리의 다른 글
Java 미니 과제 리뷰 - (2) (1) | 2023.03.02 |
---|