본문 바로가기

Java

[Java] 실생활 문제 해결을 위한 프로그램 구현

728x90

오늘은 두 가지 실생활에서 유용할 수 있는 프로그램을 다뤄보겠습니다. 첫 번째는 로또 번호 예측 프로그램으로, 무작위로 생성된 숫자들을 중복 없이 정렬하여 출력하는 프로그램입니다. 두 번째는 주민등록번호 유효성 검사 프로그램으로, 입력된 주민등록번호의 유효성을 검사하는 알고리즘을 구현합니다. 두 프로그램 모두 Java 언어를 사용하여 실습할 수 있으며, 각 문제의 해결 과정을 통해 중요한 프로그래밍 기법들을 익힐 수 있습니다.


로또 예측 프로그램과 주민등록번호 유효성 검사

1. 로또 번호 예측 프로그램

로또 번호 예측 프로그램은 무작위로 생성된 6개의 번호가 중복되지 않도록 처리하고, 오름차순으로 정렬하여 출력하는 프로그램입니다.

프로그램 설명

  • 먼저, 6개의 로또 번호를 무작위로 생성합니다. 이 때, 각 번호는 1부터 45 사이의 정수입니다.
  • 중복된 번호가 생성되면, 해당 번호를 다시 생성하여 중복을 제거합니다.
  • 중복 제거 후, 오름차순으로 번호를 정렬하여 출력합니다.
public class Lotto {
    public static void main(String[] args) {
        // 로또 번호 예측 프로그램
        int[] lotto = new int[6];

        // 값 넣기
        for (int i = 0; i < lotto.length; i++) {
            lotto[i] = (int)(Math.random() * 45) + 1;
        }

        // 중복값 제거
        for (int i = 0; i < lotto.length - 1; i++) {
            for (int j = i + 1; j < lotto.length; j++) {
                if (lotto[i] == lotto[j]) {
                    lotto[j] = (int)(Math.random() * 45) + 1;
                }
            }
        }

        // 로또번호 출력
        System.out.print("로또번호 : ");
        for (int i = 0; i < lotto.length; i++) {
            System.out.print(lotto[i] + " ");
        }
    }
}

핵심 포인트

  • Math.random() 메소드를 이용하여 랜덤 숫자를 생성하고 있습니다.
  • 중복 제거는 2중 for 문을 사용하여 비교한 후, 중복이 발견되면 새로운 값을 다시 넣습니다.
  • 로또 번호가 완성되면 그 값을 출력합니다.

 

2. 주민등록번호 유효성 검사 프로그램

주민등록번호 유효성 검사 프로그램은 주민등록번호가 올바른지 확인하는 프로그램입니다. 이 프로그램은 각 자리에 정해진 값(2~5번 위치 등)을 곱하고, 그 값을 합산하여 특정 규칙에 맞는지 확인합니다.

프로그램 설명

  • 주민등록번호의 앞 12자리에 각각 정해진 곱셈 값을 곱하고, 그 결과를 모두 합산합니다.
  • 합산된 값을 11로 나눈 나머지를 이용해 마지막 자리가 유효한지 확인합니다.
import java.util.Scanner;

public class RegisNum {
    public static void main(String[] args) {
        // 주민등록번호 유효성검사
        int[] check = {2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5}; // 각 자리에 곱할 값 배열에 저장
        int sum = 0;
        int lastNum = 0;

        Scanner sc = new Scanner(System.in);
        System.out.print("주민등록번호를 하이픈 없이 입력하세요 : ");
        String id = sc.next();

        // 각 자리에 2 3 4 5 6 7 8 9 2 3 4 5 를 곱하고 모두 더함.
        for (int i = 0; i < id.length() - 1; i++) {
            sum += Integer.parseInt(id.substring(i, i + 1)) * check[i];
        }

        // 11로 나눈 나머지 값을 구함
        // 11에서 결과값을 뺌. (단, 결과가 10이상이면 10으로 나눈 나머지 값을 다시 구함)
        lastNum = 11 - (sum % 11);
        if (lastNum >= 10) {
            lastNum = lastNum % 10;
        }

        // 마지막 결과가 주민등록번호 마지막 자리와 일치하면 유효한 주민등록번호
        if (lastNum == Integer.parseInt(id.substring(12, 13))) {
            System.out.println("유효한 주민등록번호입니다.");
        } else {
            System.out.println("유효하지 않은 주민등록번호입니다.");
        }
    }
}

핵심 포인트

  • 주민등록번호의 각 자리에 대해 주어진 값을 곱한 후 합산하고, 11로 나눈 나머지를 계산합니다.
  • 나머지를 기반으로 11에서 뺀 값을 최종적으로 계산하여 주민등록번호의 마지막 자리가 일치하는지 확인합니다.

이번에 구현한 두 프로그램은 실생활에서 유용하게 사용할 수 있는 예시입니다. 로또 번호 예측 프로그램은 무작위 숫자 생성과 중복 제거, 정렬을 다루며, 주민등록번호 유효성 검사 프로그램은 기본적인 숫자 계산과 규칙을 따르는 프로그래밍을 배울 수 있습니다. 이 프로그램들을 통해 Java의 기본적인 배열 처리, 조건문, 반복문 등 중요한 프로그래밍 개념들을 복습하고 실습할 수 있습니다.

 

앞으로도 이런 실생활과 관련된 문제를 풀어나가면서 더 많은 프로그래밍 기술을 익히고, 알고리즘의 구현 능력을 키울 수 있습니다. 계속해서 다양한 문제를 풀어보며 실력을 쌓아가세요!

728x90