4-1 로또 번호 검출기

유태형·2022년 5월 11일
0

알고리즘 - Java

목록 보기
7/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다.




문제

문제 분석

로또 번호 6자리가 모두 1~45 사이의 값을 가지고 중복없이 올바르게 입력되었는지 확인하는 메서드 입니다.




풀이

두가지를 검사하여야 합니다.

  1. 1~45사이의 값이 입력 되었는지
  2. 중복된 값이 없는지

모든 OMR 입력이 1번과 2번에 해당하지 않는다면 해당 로또는 올바르게 입력 되었습니다.

배열로 풀이

class Solution {
    public boolean solution(int[] lotto) {
        boolean[] checker = new boolean[45 + 1];
        for(int l : lotto){
            if(l < 1 || l > 45) return false; //1~45 확인
            if(checker[l]) return false; //중복 혹인
            checker[l] = true; //나온 값 체크
        }
        return true; //모든 값이 1~45, 중복x
    }
}

배열로 풀어도 크게 지장은 없지만 new boolean[46]만큼의 배열을 할당하여 true, false를 구분함으로써 메모리의 소비가 발생하게 됩니다.



Set으로 풀이

중복을 자동으로 걸러주는 Set을 활용하여 문제를 풀면

import java.util.*;

class Solution {
    public boolean solution(int[] lotto) {
        Set<Integer> set = new HashSet<>();
        for(int l : lotto){
            if(l < 1 || l > 45) return false; //1~45 확인
            set.add(l);
        }
        return set.size() == lotto.length; //모든 OMR값이 입력되었는지(길이가 같으면 중복x)
    }
}


나의 풀이

Set으로 풀이와 유사합니다.

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class 로또번호검출기 {
    public static boolean solution(int[] lotto) {
        Set<Integer> set = new HashSet<>();
        //OMR을 Set에 삽입
        for(int x : lotto) set.add(x);
        //중복여부 확인(6이 아닐시 중복 발생!)
        return set.size() == 6;
    }
    public static void main(String[] args){
        int[] input1 = {4, 7, 32, 43, 22, 19};
        System.out.println(Arrays.toString(input1));
        System.out.println(solution(input1));

        int[] input2 = {3, 19, 34, 39, 39, 20};
        System.out.println(Arrays.toString(input2));
        System.out.println(solution(input2));
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B84.Set(%EC%A7%91%ED%95%A9)/%EB%A1%9C%EB%98%90%EB%B2%88%ED%98%B8%EA%B2%80%EC%B6%9C%EA%B8%B0.java

profile
오늘도 내일도 화이팅!

0개의 댓글