elesis's haunt

프로그래머스 레벨1) 로또의 최고 순위와 최저 순위 본문

프로그래머스/LEVEL_1

프로그래머스 레벨1) 로또의 최고 순위와 최저 순위

elesis 2021. 9. 3. 15:16
class Solution {      
    public int[] solution(int[] lottos, int[] win_nums) {
   
        int cnt = 0;
        int random = 0;
        int min = 0;
        int max = 0;
        
        for(int i=0;i<lottos.length;i++) {
            if(lottos[i] == 0) { random += 1; }
            
            for(int j=0;j<win_nums.length;j++) {              
                if(lottos[i] == win_nums[j]) {
                    cnt += 1;
                }
            }
        }
        switch(random) {
            case 0: if(cnt==0) { min=1; max=1; }
					else      { min=cnt; max=cnt; }
                break;
            case 1: min=cnt; max=cnt+1;
                break;
            case 2: min=cnt; max=cnt+2;
                break;
            case 3: min=cnt; max=cnt+3;
                break;
            case 4: min=cnt; max=cnt+4;
                break;
            case 5: min=cnt; max=cnt+5;
                break;
            case 6: min=1; max=6;
                break;
        }        
        
        int[] answer = {7-max, 7-min};
        return answer;
    }
}ㅇ

 

* Math를 사용한 모습.

  상단에 스스로 푼 코드랑 같이보면 0의 갯수만큼 max에 더하는 수가 같은 값으로 증가한다. (mached+zero)

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int zero = 0;
        int matched = 0;
        for (int l : lottos) {
            if (l == 0) {
                zero++;
            } else {
                for (int w : win_nums) {
                    if (l == w) {
                        matched++;
                        break;
                    }
                }
            }
        }
        int min = matched;
        int max = matched + zero;
        int[] answer = {Math.min(7 - max, 6), Math.min(7 - min, 6)};
        return answer;
    }
}

 

* 람다를 사용한 모습.

  짧고 멋지지만 처리속도는 더 걸리는 코드이다. 학습삼아 보자.

import java.util.Arrays;
import java.util.stream.LongStream;

class Solution {
    public int[] solution(int[] lottos, int[] winNums) {
        return LongStream.of(
                (lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l) || l == 0).count(),
                (lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l)).count()
        )
                .mapToInt(op -> (int) (op > 6 ? op - 1 : op))
                .toArray();
    }
}

 

 

'프로그래머스 > LEVEL_1' 카테고리의 다른 글

프로그래머스 레벨1) 신규 아이디 추천  (0) 2021.09.08
Comments