https://school.programmers.co.kr/learn/courses/30/lessons/77484
문제 접근
먼저 반복문을 돌면서 0의 갯수를 카운팅하고 0을 제외한 나머지 로또 번호들이 당첨 번호와 몇 개나 일치하는지 검사한다.
이후 switch문에서 일치하는 로또 번호 갯수로 현재 등수를 정하고, 앞서 카운팅했던 0의 갯수들 만큼 현재 등수를 올려 최고 순위를 정한다.
순위는 1위가 제일 높기에 최고 순위의 변수인 highRank가 1보다 작아지면 1로 만들어줌
최저 순위는 0들이 로또 번호와 다 달라도 현재 순위와 같기에
최고 순위 highRank와 현재 순위 currentRank를 return
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zeroCount = 0;
int sameNumber = 0;
int highRank;
int currentRank;
for (int i = 0; i < lottos.length; i++) {
if (lottos[i] == 0) zeroCount++;
else {
for (int l : win_nums) {
if (lottos[i] == l)
sameNumber++;
}
}
}
switch (sameNumber) { // 최고 순위
// 0의 갯수 만큼 등수 올리기
case 2:
currentRank = 5;
highRank = currentRank - zeroCount;
break;
case 3:
currentRank = 4;
highRank = currentRank - zeroCount;
break;
case 4:
currentRank = 3;
highRank = currentRank - zeroCount;
break;
case 5:
currentRank = 2;
highRank = currentRank - zeroCount;
break;
case 6:
currentRank = 1;
highRank = currentRank - zeroCount;
break;
default:
currentRank = 6;
highRank = currentRank - zeroCount;
}
if(highRank < 1) highRank = 1;
int[] answer = { highRank, currentRank };
return answer;
}
}
다른 사람 풀이
1)
이 분은 Map을 활용하여 0이 아닌 로또 번호들을 Map에다 저장하고 containsKey()로 Map에 담아둔 로또 번호들이 당첨 번호와 같을 경우로 당첨된 번호의 갯수를 카운팅 하였다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
int zeroCount = 0;
for(int lotto : lottos) {
if(lotto == 0) {
zeroCount++;
continue;
}
map.put(lotto, true);
}
int sameCount = 0;
for(int winNum : win_nums) {
if(map.containsKey(winNum)) sameCount++;
}
int maxRank = 7 - (sameCount + zeroCount);
int minRank = 7 - sameCount;
if(maxRank > 6) maxRank = 6;
if(minRank > 6) minRank = 6;
return new int[] {maxRank, minRank};
}
}
2)
따로 switch를 계산하는 메서드를 활용한 방법
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
int cnt1 = 0;
int cnt2 = 0;
for(int i : lottos) {
if(i == 0) {
cnt1++;
continue;
}
for(int j : win_nums) {
if(i == j) cnt2++;
}
}
answer[0] = getGrade(cnt1+cnt2);
answer[1] = getGrade(cnt2);
return answer;
}
public int getGrade(int n) {
switch(n) {
case 6 :
return 1;
case 5 :
return 2;
case 4 :
return 3;
case 3 :
return 4;
case 2 :
return 5;
default :
return 6;
}
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 두 개 뽑아서 더하기 / JAVA] (0) | 2023.03.04 |
---|---|
[프로그래머스 / 대충 만든 자판 / JAVA] (0) | 2023.03.01 |
[프로그래머스 / 카드 뭉치 / JAVA] (0) | 2023.02.22 |
[프로그래머스 / 신고 결과 받기 / JAVA] (0) | 2023.02.16 |
[프로그래머스 / 숫자 문자열과 영단어 / JAVA] (0) | 2023.02.13 |
댓글