[프로그래머스] 로또의 최고 순위와 최저 순위 - Java, 자바

Kim Ji Eun·2022년 3월 15일
0

난이도

레벨 1

문제

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

풀이

[문제 정의]
최고 순위와 최저 순위를 차례로 출력하는 문제


[문제 풀이]
1. lottos, win_nums 배열을 비교해서 lottos의 0의 개수(zero)와 win_nums와 일치하는 수의 개수(equal)을 구한다.
2. 최고 순위: lottos.length - equal - zero + 1, 최저 순위: lottos.length - equal + 1를 answer에 저장하면 된다.
3. 조건이 더 있다.

  • lottos 배열이 다 0인 경우 => zero=6, equal=0
  • lottos, win_nums 이 모두 일치하는 경우 => zero=0, equal=6
  • lottos에 0이 없고, win_nums과 모두 일치하지 않는 경우 => zero =0, equal=0(이 부분을 놓치면 테스트케이스 14번만 실패가 뜬다.)
  1. 위 조건들을 만족하도록 if문을 잘 짜주면 코드를 완성할 수 있다.

[후기]
이런 조건이 있는 경우 어떤 조건이 있는지 미리 확인하고, 놓치고 있는 조건은 없는지 다시 생각해볼 필요가 있다.

코드

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        int zero = 0;
        int equal = 0;
        
        for(int i=0;i<lottos.length;i++){
            if(lottos[i]==0)
                zero++;
            for(int j=0;j<win_nums.length;j++){
                if(lottos[i]==win_nums[j]){
                    equal++;
                }
            }
        }
        
        if(equal == 0 && zero == lottos.length){
             answer[0] = 1; 
             answer[1] = lottos.length;  
        }else if(equal == lottos.length && zero == 0){
             answer[0] = 1; 
             answer[1] = 1;  
        }else if(equal == 0 && zero == 0){
             answer[0] = lottos.length; 
             answer[1] = lottos.length;  
        }
        else{
            answer[0] = lottos.length - equal - zero + 1; 
            answer[1] = lottos.length - equal + 1;        
        }
        
        return answer;
    }
}
profile
Back-End Developer

0개의 댓글