본문 바로가기

Algorithm

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

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

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

[풀이 과정]

민우가 로또를 구매했다. 민우의 동생이 로또에 낙서를 하여 일부 번호가 알아 볼 수 없게 되어 0으로 표기하기로 하였다. 민우의 로또 번호를 가지고 당첨 로또 번호를 맞춰 순위를 매기는 문제이다.

 

이때  최고 순위최저 순위를 찾아야한다. 

최고 순위를 구하고 싶다면 0의 개수 를 맞은 로또번호의 개수로 세어준다. (맞은개수+0의 개수) 를 가지고 순위를 정한다.

최저 순위는 그냥 맞은개수를 가지고 를 가지고 순위를 정한다.

 

따라서 0의 개수와 민우의 로또 번호와 당첨된 로또번호의 맞은 번호의 개수를 구하면 된다!

  public int[] solution(int[] lottos, int[] win_nums) {
        
       int zero_count=0; //0의 개수
       int same_count=0; //맞은 개수
       int min_rank,max_rank; //최고등수 ,최저 등수
        
      
        for(int i = 0 ; i <lottos.length;i++){
            //0의 개수를 세어준다.
            if(lottos[i]==0){
                zero_count++;
            }
            //당첨 번호와 같은 번호의 개수를 세어준다.
            for (int j = 0 ; j <win_nums.length;j++){
                if(lottos[i]==win_nums[j]){
                    same_count++;
                }
             }
        }
        
        
      min_rank = rank(same_count+zero_count);
      max_rank = rank(same_count);
    
     
        return new int []{min_rank,max_rank};
    }

 

switch - case 문을 이용하여 맞은 개수에 따른 순위를 return 시켜준다.

   public int rank(int n){
        //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;
                
            }
    }

 

[코드]

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        
       int zero_count=0; //0의 개수
       int same_count=0; //맞은 개수
       int min_rank,max_rank; //최고등수 ,최저 등수
        
      
        for(int i = 0 ; i <lottos.length;i++){
            //0의 개수를 세어준다.
            if(lottos[i]==0){
                zero_count++;
            }
            //당첨 번호와 같은 번호의 개수를 세어준다.
            for (int j = 0 ; j <win_nums.length;j++){
                if(lottos[i]==win_nums[j]){
                    same_count++;
                }
             }
        }
        
        
      min_rank = rank(same_count+zero_count);
      max_rank = rank(same_count);
    
     
        return new int []{min_rank,max_rank};
    }
    
    public int rank(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;
                
            }
    }
}

[결과]

'Algorithm' 카테고리의 다른 글

[Java] 백준 14502번 : 연구소  (0) 2022.03.01