elesis's haunt
프로그래머스 레벨1) 로또의 최고 순위와 최저 순위 본문
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