로또 프로그램 ep04

유현서·2025년 5월 20일

로또 프로그램

목록 보기
4/7

목표 : 과거 로또 조합과 비교해 중복이면 추천 목록에서 제외하기

해야할 단계
1. 과거 당첨 번호 리스트 Set 형태로 변환(빠른 검색 위해)
2. 랜덤으로 만든 후보 번호 정렬 후 문자열로 변환
3. 과거 set 에 있는지 확인, 있으면 스킵 없으면 저장

for(타입 변수명 : 컬렉션){}
-> 컬렉션(list, array 등)에서 요소를 꺼내서 변수명에 담고 반복한다
for(LottoResult result : lottoData){}
-> lottoData에 있는 값을 하나씩 꺼내서 result에 담고 반복한다

왜 굳이 result 같은 변수에 담고 반복하지?
-> 변수에 담지 않으면 그 값을 사용할 수 없음
향상된 for 문은 자동으로 하나씩 꺼내고 그걸 변수에 저장해서 써야함

  1. 과거 당첨 번호 조합을 문자열 Set으로 변환
    Set pastResultsSet = new HashSet<>();
    for (LottoResult result : lottoData) {
    int[] numbers = result.getNumberOfRound();
    Arrays.sort(numbers);
    String key = convertToKey(numbers);
    pastResultsSet.add(key);
    }
  1. 추천 번호 조합 생성 후 중복 검사
    String key = convertToKey(candidate);
    if (!pastResultsSet.contains(key) && isValidCombination(candidate, ratioOption)) {
    Arrays.sort(candidate); // 보기 좋게 정렬
    recommendations.add(candidate);
    }
  1. 보조 메서드 - 번호 배열을 문자열 키로 바꾸는 함수
    private String convertToKey(int[] nums) {
    Arrays.sort(nums);
    return Arrays.stream(nums)
    .mapToObj(String::valueOf)
    .collect(Collectors.joining(","));
    }

candidate: 후보 추천 번호

if (!pastResultsSet.contains(key) && isValidCombination(candidate, ratioOption))
-> pastResultsSet에 key가 없어야하고 isValidCombination(candidate, ratioOption)도 되어야함

0개의 댓글