Published 2023. 3. 2. 20:43

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
복사했습니다!