프로그래머스 없는 숫자 더하기 로또의 최고 순위와 최저 순위(99클럽 코딩테스트 12일차 TIL)

KIMYEONGJUN·2024년 4월 8일
0
post-thumbnail

목표

오늘 문제중에 로또의 최고 순위와 최저 순위 문제처럼 코딩테스트의 문제가 나올때를 대비해서 열심히 코딩테스트를 준비할려고한다.

문제

// 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어짐
// numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 해줌

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        int[] check = new int[10];
        
        for(int num: numbers) {
            check[num]++;
        } 
        
        for(int i = 0; i < 10; i++) {
            if(check[i] == 0) {
                answer += i;
            }
        }
        System.out.println(answer);
        return answer;
    }
}

chek 배열을 선언하여 numbers 배열의 숫자 유무를 체크해준다.
numbers를 순회하며 해당 인덱스의 check 값을 1증가 시킨다.
check 배열을 순회하면서 값이 0인 인덱스의 값을 answer에 누적합산한다. 0이면 numbers 배열에 해당 숫자가 없음을 의미한다.
answer 값을 리턴해준다.

// 입력으로 구매한 로또 번호와 당첨 번호가 주어지면, 구매한 로또 번호 중 알아볼 수 없는 0의 개수에 따라 최고/최저 당첨 가능한 순위를 계산하는 문제.

// 순위 규칙은 다음과 같습니다.

// 1등: 6개 번호 일치
// 2등: 5개 번호 일치
// 3등: 4개 번호 일치
// 4등: 3개 번호 일치
// 5등: 2개 번호 일치
// 6등(낙첨): 0~1개 번호 일치

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        int zeroCount = 0;
        int matched = 0;
        
        for(int lotto : lottos) {
            if(lotto == 0) {
                zeroCount++;
                continue;
            }
            
            for(int winNum : win_nums) {
                if(lotto == winNum) {
                    matched++;
                    break;
                }
            }
        }
        
        answer[0] = 7 - (matched + zeroCount);
        answer[1] = 7 - matched;
        if(answer[0] > 6) answer[0] = 6;
        if(answer[1] > 6) answer[1] = 6;
        
        return answer;
    }
}

lottos에서 0의 개수를 세어준다.
lottos와 win_nums를 비교하여 일치하는 숫자의 개수를 구한다.
최고 순위는 일치한 숫자 + 0의 개수로, 최저 순위는 일치한 숫자로 계산한다.
순위를 반환하기 전에 범위 체크를 한다.
이를 통해 가능한 최고/최저 순위를 도출할 수 있다.

마무리

두번째 로또 문제에서 조금 애를 먹었다. 문제에 길이가 길어질 수록 조금 많이 어렵게 느껴지는것같다.

profile
Junior backend developer

2개의 댓글

comment-user-thumbnail
2024년 4월 28일

두 문제 풀이 잘 보구 갑니다!

1개의 답글