본문 바로가기

Server Programming/BackEnd Project

로또의 최고 순위와 최저 순위 - Collections.frequncy, Collectors.toList(), boxed().toArray(Integer[]::new);

반응형
import java.util.*;
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        //int[] -> Integer[]
        int cnt=0;
        for(int x:lottos) if(x==0) cnt++;
        // System.out.println("cnt: "+cnt);
        Integer[] buyArr=Arrays.stream(lottos).boxed().toArray(Integer[]::new);
        Integer[] winArr=Arrays.stream(win_nums).boxed().toArray(Integer[]::new);
        //당첨이 가능했던 최고 순위와 최저 순위
        //set으로 비교 -> 0의 개수와 맞은 개수 비교해
        //포함 하는 개수+0이 모두 win_nums가 될때   -> 개수 : 최고 순위
        //포함 하는 개수+0이 모두 win_nums가 안 될때 -> 개수 : 최저 순위
        Set<Integer> buySet=new HashSet<>(Arrays.asList(buyArr));
        Set<Integer> winSet=new HashSet<>(Arrays.asList(winArr));
        int wrong=0;
        int right=0;
        for(int x:buySet){
            if(winSet.contains(x)) right++;
            else wrong++;
            // System.out.println(right+" "+wrong);
        }
        int high=right+cnt;
        int low=right;
        answer[0]=isRank(high);
        answer[1]=isRank(low);
        
        return answer;
    }
    public int isRank(int a){
        if(a<2) return 6;
        else return 7-a;
    }
}
 
 
 
1. Collections 클래스의 frequency 메서드 이용
2. int[] -> List<Integer>로 변환하는데 스트림 이용 [임포트 필요]
import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        List<Integer> buyList=Arrays.stream(lottos)
                        .boxed()
                        .collect(Collectors.toList());
        List<Integer> winList=Arrays.stream(win_nums)
                        .boxed()
                        .collect(Collectors.toList());
        
        int cnt=Collections.frequency(buyList, 0);
        // System.out.println("cnt: "+cnt);
        //당첨이 가능했던 최고 순위와 최저 순위
        //set으로 비교 -> 0의 개수와 맞은 개수 비교해
        //포함 하는 개수+0이 모두 win_nums가 될때   -> 개수 : 최고 순위
        //포함 하는 개수+0이 모두 win_nums가 안 될때 -> 개수 : 최저 순위
        int wrong=0;
        int right=0;
        for(int x:buyList){
            if(winList.contains(x)) right++;
            else wrong++;
            // System.out.println(right+" "+wrong);
        }
        int high=right+cnt;
        int low=right;
        answer[0]=isRank(high);
        answer[1]=isRank(low);
        return answer;
    }
    public int isRank(int a){
        if(a<2) return 6;
        else return 7-a;
    }
}

 

 

+) 모두 포함하는지 확인하려면 (true,false) 리턴 [addAll, removeAll, retainAll]

 

        //모두 포함하는지 확인하는 함수
        if(set.containsAll(Arrays.asList("asd", "efg")))

 

 

반응형