https://programmers.co.kr/learn/courses/30/lessons/77484
로또번호 배열 lottos[] -> 0~45
당첨번호 배열 win_nums[] -> 1~45, 같은 숫자 x
출력은 최고순위, 최저순위 순서로 출력한다.
문제를 보면 많이 맞췄을 경우는 0을 다 맞췄을 때, 거의 못맞췄을 경우는 0이 다 틀렸을 때이다.
그래서 0을 뺀 로또번호와 당첨번호를 비교해서 맞춘 개수 + 0의 개수가 다 맞춘 경우, 맞춘 개수만 하는게 다 틀렸을 경우이다.
코드
import java.util.*;
import java.util.Arrays;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = {0, 0};
Arrays.sort(lottos); // 배열 정렬을 해줬다. 안해도 된다.
Arrays.sort(win_nums);
int num = 0, zero = 0;
for(int i = 0; i < 6; i++){
if(lottos[i] == 0) zero++; // 0의 개수
for(int j = 0; j < 6; j++)
if(lottos[i] == win_nums[j]){
num++; // 0을 제외하고 맞춘 개수
break;
}
}
int high = num + zero;
int low = num;
answer[0] = rank(high);
answer[1] = rank(low);
return answer;
}
public int rank(int num){ // 맞춘 개수로 보는 등수
switch(num){
case 0: return 6;
case 1: return 6;
case 2: return 5;
case 3: return 4;
case 4: return 3;
case 5: return 2;
case 6: return 1;
default: return 0;
}
}
}
로또가 6개밖에 없어서 그냥 배열 통째로 비교했다.
맞춘 개수로 확인할 등수는 따로 함수화해줬다.
프로그래머스로 풀어보는게 처음이라 return answer 부분은 찾아봤다....ㅠㅠ 보통 저렇게 하는구나
다른사람의 코드도 살펴보자!
내가 푼 코드랑 비슷한데 이분은 for each문을 사용해 0이 아닐 때에만 비교하셨다. 호오....
이분도 for each문을 사용하셨고 map함수를 이용했다. 0이 아닐 때 true로 해주고
map함수의 containsKey를 사용하여 map 안에 win_nums의 값이 있는지 확인하고 있으면 sameCount++ 해줬다.
순위를 매기는 것도., 저렇게 고급지게 표현이 되는구나~~!
확실히 boolean을 사용하는게 성능이 좋은 것 같긴 하다...~
이분은 math함수를 사용했다.
Math.min(7 - max, 6) 이런식으로 7-max 값과 6중에 작은 값을 출력하는 방식을 사용했다.
7 - 맞춘값을 하면 등수가 나온다!! 그러네!!
거기에 하나도 못맞춰서 7 - 0이면 7등이 나오니까 7, 6중에 작은 값인 6을 출력하도록 했다.!
남의 코드 보면서 더 배운다~~ 레벨 1인데 얻어갈게 많다.
코테도 보통 이걸로 보고... 교수님도 프로그래머스를 추천해주셔서 얘를 우선 다 풀려고 한다.
ide 없이 하는게 어렵구나~ 프로그래머스 문제를 우선 다 풀어야짓!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 for JAVA (0) | 2021.11.24 |
---|---|
[프로그래머스] 키패드 누르기 for JAVA (0) | 2021.11.22 |
[프로그래머스] 숫자 문자열과 영단어 for JAVA (0) | 2021.11.22 |
[프로그래머스] 신규 아이디 추천 for JAVA (0) | 2021.11.05 |
[프로그래머스] 체육복 for JAVA (0) | 2021.10.21 |