https://programmers.co.kr/learn/courses/30/lessons/77484#fn1
import java.util.Arrays;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int match = 0; //일치하는 개수
int zero = 0; //0의 개수
for (int i = 0; i < 6; i++) {
int a = lottos[i];
if (Arrays.stream(win_nums).anyMatch(x -> x == a)) match++;
if (a == 0) zero++;
}
//일치한 개수로 순위 출력
//match+zero가 0일 때, 즉 모든 로또 번호를 알고 다 틀렸을 때 최고 순위는 6
int max = (match+zero == 0) ? 6 : 7-match-zero;
//match가 0일때 최저 순위는 6
int min = (match == 0) ? 6 : 7-match;
int[] answer = new int[] {max, min};
return answer;
}
}
Stream의 anyMatch를 사용해서 일치하는 개수를 구하고, 0의 개수도 구했다.
최고 순위의 경우 일치하는 개수 + 0의 개수(0이 다 일치한다고 가정)를 이용해 출력하였고,
최저 순위는 0이 다 틀렸다고 가정하고, 일치하는 개수만 가지고 구했다.
또, 순위를 바로 출력하기 위한 계산식의 경우 마지막 순위가 6인데 7이 나올 수 있어서 삼항연산자를 추가하였다.
처음에 문제를 볼 때는 문제도 길고 고려해야하는 조건이 매우 많아 보였는데,
어떤 식으로 구하면 될지 먼저 틀을 정하고 나니 구현하는건 크게 어렵지 않았다.
'Language > JAVA' 카테고리의 다른 글
[프로그래머스] 소수 찾기 (0) | 2022.01.21 |
---|---|
[프로그래머스] 모의고사 (0) | 2022.01.20 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2022.01.20 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.01.20 |
#최소값, 최대값 구하기 (0) | 2022.01.19 |