단순히 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();
}
}