728x90
문제
로또 번호 맞추기 게임에서 사용자가 선택한 로또 번호와 당첨 번호를 비교하여, 사용자가 맞출 수 있는 최고 순위와 최저 순위를 구하는 문제입니다.
사용자가 구매한 로또 번호와 실제 당첨 번호가 주어집니다. 이때 사용자가 구매한 로또 번호에는 0이 포함될 수 있는데, 0은 어떠한 숫자와도 매칭될 수 있습니다. 즉, 0이 나올 경우, 이는 아직 정해지지 않은 번호로, 해당 자리에 어떤 숫자가 올 수 있습니다.
- 최고 순위는 사용자가 0을 모두 맞는 번호로 바꿨을 때의 맞춘 번호 개수를 기준으로 합니다.
- 최저 순위는 사용자가 0을 모두 틀린 번호로 간주했을 때의 맞춘 번호 개수를 기준으로 합니다.
나의 풀이
import java.util.Arrays;
public class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zeroCount = 0;
int correct = 0;
for (int i = 0; i < lottos.length; i++) {
if(lottos[i] == 0){
zeroCount++;
}
for(int j = 0 ; j < lottos.length ; j++){
if(lottos[i] == win_nums[j]){
correct++;
}
}
}
return new int[]{getRank(correct+zeroCount),getRank(correct)};
}
// 순위 계산 메서드
private int getRank(int correct) {
switch (correct) {
case 6: return 1;
case 5: return 2;
case 4: return 3;
case 3: return 4;
case 2: return 5;
default: return 6;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
int lottos[] = {44, 1, 0, 0, 31, 25};
int win_nums[] = {31, 10, 45, 1, 6, 19};
System.out.println(Arrays.toString(sol.solution(lottos,win_nums)));
}
}
먼저 간단하게 for문으로 0의 개수를 구하고, 이중 for문을 사용하여 내가 선택한 전체 로또 번호와 당첨 번호를 순회하면서 당첨된 개수를 구해줍니다.
그러면 0의 개수 zeroCount와 맞춘 개수 correct가 구해지는데, getRank라는 순위 계산 메서드를 만들고 맞춘개수와 0의 개수를 더하면 최고 점수를 구할 수 있고, 0의 개수만으로는 최저 점수를 구할 수 있습니다.
다른 방법
import java.util.Arrays;
public class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zeroCount = 0;
int correct = 0;
for (int i = 0; i < lottos.length; i++) {
if (lottos[i] == 0) {
zeroCount++;
} else {
// win_nums 배열을 순회하며 lottos[i]와 비교
for (int j = 0; j < win_nums.length; j++) {
if (lottos[i] == win_nums[j]) {
correct++;
break; // 하나라도 맞으면 더 이상 비교할 필요 없음
}
}
}
}
return new int[]{getRank(correct+zeroCount),getRank(correct)};
}
// 순위 계산 메서드
private int getRank(int correct) {
switch (correct) {
case 6: return 1;
case 5: return 2;
case 4: return 3;
case 3: return 4;
case 2: return 5;
default: return 6;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
int lottos[] = {44, 1, 0, 0, 31, 25};
int win_nums[] = {31, 10, 45, 1, 6, 19};
System.out.println(Arrays.toString(sol.solution(lottos,win_nums)));
}
}
Arrays.binarySearch()를 사용하여 lottos의 각 값이 win_nums 배열에 존재하는지 빠르게 확인했습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.30 - Jmeter 한글 버전으로 변경하기 (0) | 2024.09.30 |
---|---|
[TIL, 일일 회고] 2024.09.29 - Arrays.binarySearch메서드란❓ (0) | 2024.09.29 |
[TIL, 일일 회고] 2024.09.27 - Git: 'fatal: couldn't find remote ref' 오류 해결하기 (0) | 2024.09.27 |
[TIL, 일일 회고] 2024.09.26 - 제곱근을 이용한 효율적인 약수 계산 방법 (0) | 2024.09.26 |
[TIL, 일일 회고] 2024.09.25 - Arrays.fill() 메서드 (프로그래머스 - 덧칠하기) (1) | 2024.09.25 |