https://school.programmers.co.kr/learn/courses/30/lessons/77484
굳이 복잡하게 생각했던 문제..처음에는 최고순위를 찾을 때 0의 개수만큼 당첨번호 개수를 추가해야하는데, List를 이용하여 원래 로또번호와 겹치지 않고(같은 번호가 2개 이상이면 안된다는 규칙) 0의 개수를 넘지않게 세면서 당첨번호 개수를 추가했다.
정답이긴 하나 쓸데없는 접근 방식이었다..
다시 생각해보니 그냥 최고 순위는 0의 개수만큼 당첨번호 개수를 늘리고, 최저 순위는 0이 존재하나 존재하지 않나 상관없이 원래 로또 번호 중 당첨 번호의 개수이다.
import java.util.*;
class Solution {
int countLank(int same){
switch (same){
case 6 : return 1;
case 5 : return 2;
case 4 : return 3;
case 3 : return 4;
case 2 : return 5;
default : return 6;
}
}
public int[] solution(int[] lottos, int[] win_nums) {
ArrayList<Integer> original = new ArrayList<>();
ArrayList<Integer> max = new ArrayList<>();
Solution st = new Solution();
int zeroCount =0;
for(int i=0; i<6; i++){
if(lottos[i]==0)
zeroCount++;
for(int j=0; j<6; j++){
if(lottos[i]==win_nums[j])
original.add(lottos[i]);
}
}
int minLank, maxLank;
if(zeroCount!=0){
for(int i=0; i<6; i++){
if(!original.contains(win_nums[i])&&max.size()<zeroCount)
max.add(win_nums[i]);
}
maxLank = st.countLank(original.size()+max.size());
minLank = st.countLank(original.size());
}
else{
maxLank = st.countLank(original.size());
minLank = maxLank;
}
int[] answer = {maxLank,minLank};
return answer;
}
}
import java.util.*;
class Solution {
int countLank(int same){ //순위 계산 함수
switch (same){
case 6 : return 1;
case 5 : return 2;
case 4 : return 3;
case 3 : return 4;
case 2 : return 5;
default : return 6;
}
}
public int[] solution(int[] lottos, int[] win_nums) {
Solution st = new Solution();
int same =0, zeroCount=0;
for(int i=0; i<6; i++){
if(lottos[i]==0){//로또번호가 0이면
zeroCount++;//0의 개수를 증가시키고
continue;//다음 반복으로 바로 넘어감
}
for(int j=0; j<6; j++){
if(lottos[i]==win_nums[j])//로또번호가 당첨되면
same++; //당첨번호 개수를 늘림
}
}
//최고순위 : 기존 당첨 개수 + 비어있던 0만큼 당첨됨
int maxLank = st.countLank(same + zeroCount);
//최저순위 : 기존 당첨 개수 + 비어있던 0이 아무것도 당첨되지 않음
int minLank = st.countLank(same);
int[] answer = {maxLank,minLank};
return answer;
}
}
코테 풀면서 매번 드는 생각 : 왜 저렇게 쓰레기같이 풀었더라..?