[프로그래머스] 로또의 최고 순위와 최저 순위 JAVA 풀이

권용환·2021년 8월 19일
0

programmers_level1

목록 보기
1/14
post-thumbnail

문제 바로가기

나의 풀이

단순히 lottos의 모든 숫자를 탐색하여 0의 개수를 구하고, win_nums와 일치하는 숫자의 개수를 구하였다.

이 둘을 더해 rank라는 static 함수로 보내면 2개 이상 맞춘 경우와 그 이하의 경우 각각 순위 값을 반환해주도록 하였다.

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int zeroCount = 0;
        int correctCount = 0;
        for (int lotto : lottos) {
            if (lotto == 0) {
                zeroCount += 1;
            } else {
                if (IntStream.of(win_nums).anyMatch(x -> x == lotto))
                    correctCount += 1;
            }
        }
        int[] answer = {rank(zeroCount + correctCount), rank(correctCount)};
        return answer;
    }

    public static int rank(int num) {
        if (num >= 2)
            return 7 - num;
        return 6;
    }
}

다른 사람의 풀이

프로그래머스에서 좋아요를 가장 많이 받은 "홍희표"님의 코드를 가져왔다.

람다 표현식을 통해 코드 길이는 짧으나 가독성이 좋아보이지는 않는다. 다만, 자바를 자유자재로 활용하기 위해 조금 더 자세히 공부해보고 이를 바탕으로 추가 포스팅을 해야겠다.

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();
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글