해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다.
로또 번호 6자리가 모두 1~45 사이의 값을 가지고 중복없이 올바르게 입력되었는지 확인하는 메서드 입니다.
두가지를 검사하여야 합니다.
모든 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을 활용하여 문제를 풀면
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));
}
}