본문 바로가기

카테고리 없음

[Flutter_개발] 도전과제

1. 중복 없이 번호를 추첨하여 복권을 발급 기능

[ 설명 ]

  • 1~45사이의 숫자들 중 6개의 숫자를 중복없이 뽑아 하나의 복권(리스트)으로 만듭니다.

[ 조건 ]

  • 출력 형태 : 발급한 로또 번호 : [로또 번호 목록 전체]
  • 발급한 로또 번호: [3, 11, 15, 29, 35, 42]

[ 힌트 ]

  • Set 또는 List의 contains() 등을 통해 선택한 번호가 리스트에 포함되어 있는지 여부를 판별할 수 있습니다.
  • 숫자를 랜덤으로 뽑는 기능은 dart:math 라이브러리의 Random().nextInt(int nubmer) 를 사용합니다.
    • Random().nextInt(int nubmer) 는 0부터, number-1 사이의 int 값중 하나를 무작위로 골라 반환하는 메서드입니다.

2. 발급한 복권의 번호와 당첨 번호 비교 기능

[ 설명 ]

  • 앞서 발급한 복권 번호를 지정된 당첨 번호와 비교하여, 일치하는 번호의 개수를 세고 당첨 등수를 판정합니다.

[ 조건 ]

  • 당첨 번호: [9, 19, 29, 35, 37, 38]
  • 일치 개수에 따른 당첨 기준
    • 1등: 5개 이상 일치
    • 2등: 4개 일치
    • 3등: 3개 일치
    • 실패: 2개 이하 일치
  • 출력 형태
    • 당첨이 되었을 경우 당첨 여부 : [당첨 등수]를 출력합니다.
    • 단, 당첨에 실패한 경우는 당첨 여부 : 당첨 실패! 를 출력합니다

[ 힌트 ]

  • 조건문과 연산자를 통해 할인 여부, 할인 금액을 계산할 수 있습니다.

3. 발급한 로또를 초기화 할 수 있는 기능

[ 설명 ]

  • 당첨 번호 조회 이후, 다음 당첨 여부 조회를 위해 복권번호를 초기화 합니다.

[ 조건 ]

  • 추후에 당첨 여부를 다시 확인할 수 있도록 복권 번호를 초기 상태로 되돌린 뒤, 현재 상태를 출력하세요.

    import 'dart:math';

    class Lotto {
      List<int> numbers = []; // 발급된 로또 번호를 담는 리스트

      // 로또 번호 발급
      void Lottonum() {
        numbers.clear();
        Random random = Random();

        while (numbers.length < 6) {
          int num = random.nextInt(45) + 1; // 1~45 사이 숫자
          if (!numbers.contains(num)) {
            // 중복을 방지하기 위해 뽑은 숫자인지 contains로 확인
            numbers.add(num);
          }
        }

        numbers.sort(); // 보기 좋게 정렬
        print("발급한 로또 번호: $numbers");
      }

      // 당첨 여부 확인
      void checkResult(List<int> winningNumbers) {
        int matchCount = numbers.where((n) => winningNumbers.contains(n)).length;

        if (matchCount >= 5) {
          print("당첨 여부 : 1등 (일치 개수: $matchCount)");
        } else if (matchCount == 4) {
          print("당첨 여부 : 2등 (일치 개수: $matchCount)");
        } else if (matchCount == 3) {
          print("당첨 여부 : 3등 (일치 개수: $matchCount)");
        } else {
          print("당첨 여부 : 당첨 실패! (일치 개수: $matchCount)");
        }
      }

      // 로또 초기화
      void resetLotto() {
        numbers.clear();
        print("현재 발급한 로또 번호: $numbers");
      }
    }

    void main() {
      Lotto lotto = Lotto();

      lotto.Lottonum();

      List<int> winningNumbers = [9, 19, 29, 35, 37, 38];
      lotto.checkResult(winningNumbers);

      lotto.resetLotto();
    }

오늘은 Dart로 간단한 로또 프로그램을 작성하면서 List, Random, 조건문, 함수, 클래스 활용을 복습했다.

1. 로또 번호 발급 기능

  • Random().nextInt(45) + 1을 사용해서 1 ~ 45 범위의 숫자를 무작위로 뽑음.
  • while 문을 사용해 6개 숫자가 뽑힐 때까지 반복.
  • 중복을 피하기 위해 if (!numbers.contains(num)) 조건을 사용.
  • numbers.sort()로 보기 좋게 정렬해서 출력.

 배운 점:

  • nextInt(45)는 0~44까지 숫자를 뽑기 때문에 +1을 해줘야 1~45 범위가 됨.
  • contains() 메서드를 이용해 중복 체크가 가능.

2. 당첨 여부 확인 기능

  • winningNumbers라는 리스트를 준비하고, 발급된 번호와 비교.
  • where 메서드를 이용해서 겹치는 숫자를 걸러낸 뒤 length로 개수를 확인.
  • 일치 개수에 따라 1등~3등 또는 실패를 출력.

 배운 점:

  • where() + contains() 조합으로 리스트 간 교집합 개수를 쉽게 구할 수 있음.
  • 조건문(if, else if)을 활용해 당첨 등급을 판별할 수 있음.

3. 로또 초기화 기능

  • numbers.clear()를 사용해서 리스트를 비움.
  • 초기화 이후 현재 상태를 []로 출력.

 배운 점:

  • clear() 메서드로 리스트를 비울 수 있음.
  • 클래스에 함수를 만들어두면 재사용하기 좋음.

4. 전체 프로그램 실행 흐름

  1. Lotto 클래스 객체 생성 → Lotto lotto = Lotto();
  2. Lottonum() 실행 → 랜덤 로또 번호 발급
  3. checkResult(winningNumbers) 실행 → 당첨 여부 확인
  4. resetLotto() 실행 → 로또 초기화

 오늘 느낀 점

  • 프로그램을 클래스로 묶어서 기능별로 나누니 훨씬 관리하기 편했다.
  • 로또 문제를 통해 랜덤, 중복체크, 조건문, 리스트 같은 기초 개념을 종합적으로 연습할 수 있었다.
  • 특히 contains, where, clear, sort 같은 리스트 관련 메서드를 다양하게 사용하면서 익숙해졌다.
  • 하지만 개인과제와는 다르게 도전과제에서는 프로그램 구성에 있어서 주도적으로 하기엔 아직 부족함을 많이 느꼈다. ai의 도움을 많이 받아서 했기 때문에...

 

도전과제를 진행하면서 내가 얼마나 부족한지 많이 느끼고 있고, 프로그램 구성을 거의 맡기고 분석하는 느낌으로 해결 했기때문에 다음부터는 막히는게 있어도 ai 도움은 최소화 해서 진행하는 노력을 해보자. 어찌 보면 지금 당장은 부족한게 당연하기 때문에 포기하지 말고 끝까지 노력해보자!