[프로그래머스] 로또의 최고 순위와 최저 순위 java

Elmo·2022년 8월 19일
0
post-custom-banner

🔔 로또의 최고 순위와 최저 순위

https://school.programmers.co.kr/learn/courses/30/lessons/77484

  • 굳이 복잡하게 생각했던 문제..처음에는 최고순위를 찾을 때 0의 개수만큼 당첨번호 개수를 추가해야하는데, List를 이용하여 원래 로또번호와 겹치지 않고(같은 번호가 2개 이상이면 안된다는 규칙) 0의 개수를 넘지않게 세면서 당첨번호 개수를 추가했다.

  • 정답이긴 하나 쓸데없는 접근 방식이었다..

다시 생각해보니 그냥 최고 순위는 0의 개수만큼 당첨번호 개수를 늘리고, 최저 순위는 0이 존재하나 존재하지 않나 상관없이 원래 로또 번호 중 당첨 번호의 개수이다.

🔑 java 풀이(수정 전)

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;
    }
}

🔑 java 풀이(수정 후)

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;
    }
}

코테 풀면서 매번 드는 생각 : 왜 저렇게 쓰레기같이 풀었더라..?

profile
엘모는 즐거워
post-custom-banner

0개의 댓글