o 요구사항
두 int형 배열 lottos, win_nums 을 매개값으로 받아 가능한 순위 --> b
일치하는 개수 만큼 순위가 올라간다
단 알아볼 수 없는 번호인 0의 개수 만큼 올라갈 수 있는 순위 --> a
정수형 배열 [a, b] 반환하기
o 코드진행
다른 방법들도 많지만 해당 문제는 import 없이 배열만 사용하였다.
필요한 메소드를 생성하여 인자값과 반환값 단계별로 넣는 방식으로 풀이하였다.
o 코드설계
1. 배열의 요소를 크기별로 정렬하여 배열을 리턴하는 메소드
2. 두 배열 값 비교하여 일치하는 값 반환하는 메소드
3. 배열의 요소 중 0이 포함된 개수를 반환하는 메소드
4. 로또 맞은 개수를 인자값으로 순위를 반환하는 메소드
5. 현재 순위와 0개수를 인자값으로 받아 가능한 순위를 반환하는 메소드
o 완성코드
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zeroCount = arrayZeroCount(arraySort(lottos));
int same = arrayCompare(arraySort(lottos), arraySort(win_nums));
int[] answer = new int[] {rankChance(lottoRank(same), zeroCount), lottoRank(same)};
return answer;
}
//배열 정렬하기
int[] arraySort(int[] arrayA){
for(int i=0; i<arrayA.length-1; i++) {
for(int j=i+1; j<arrayA.length; j++) {
if(arrayA[i] >= arrayA[j] ) {
int temp = arrayA[i];
arrayA[i] = arrayA[j];
arrayA[j] = temp;
}
}
}
return arrayA;
}
//두 배열을 받아 일치하는 개수 세기
int arrayCompare(int[] arrayA, int[] arrayB) {
int count = 0;
int start = 0;
for(int i=0; i<arrayA.length; i++) {
for(int j=start; j<arrayB.length; j++) {
if(arrayA[i] == arrayB[j]) {
start = j+1;
count++;
break;
}
}
}
return count;
}
//배열 element 중 0개수 반환
int arrayZeroCount(int[] arrayA) {
int count = 0;
for(int i=0; i<arrayA.length; i++) {
if(arrayA[i] == 0) {
count++;
}
if(arrayA[i] > 0) {
return count;
}
}
return count;
}
//로또 맞은 개수에서 순위계산하기
int lottoRank(int count){
int rank = 0;
if(count < 2) {
return 6;
}
rank = 7 - count;
return rank;
}
//현재 순위와 0개수 인자값. 순위 가능성 반환
int rankChance(int rank, int zeroCount) {
int chance = 1;
chance = rank - zeroCount;
if(chance < 1){
return 1;
};
return chance;
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java][프로그래머스-코딩테스트 level2] 피보나치 수 (0) | 2021.06.12 |
---|---|
[Java][프로그래머스-코딩테스트 level1] 3진법 뒤집기 (0) | 2021.06.11 |
[Java][프로그래머스-코딩테스트 level1] 약수의 개수와 덧셈 (0) | 2021.06.10 |
[Java][프로그래머스-코딩테스트 level1] 폰켓몬 (0) | 2021.06.10 |
[Java][프로그래머스-코딩테스트 level1] 2016년 (0) | 2021.06.09 |