프로그래머스 | 로또의 최고 순위와 최저 순위 (Java)

mul·2023년 2월 5일
0

알고리즘

목록 보기
11/65
post-custom-banner

23.03.10 코드 수정 반영

🔒 문제

프로그래머스 Lv.1 로또의 최고 순위와 최저 순위

🔑 해결

민우가 구매한 로또 번호를 담은 배열 lottos(알아볼 수 없는 번호는 0), 당첨 번호를 담은 배열 win_nums가 매개변수로 주어지면, 당첨 가능한 최고 순위와 최저 순위를 배열에 담아 return하는 solution 함수를 작성하는 문제이다.

0으로 표기한 알아볼 수 없는 번호가
1. 모두 당첨 번호라면 최고 순위
2. 모두 당첨 번호가 아니라면 최저 순위
이므로 식별 가능한 숫자 중에 당첨된 숫자의 갯수만으로 순위를 매긴다면 최저 순위가, 식별 가능한 숫자 개수에 식별 불가능한 숫자 갯수를 더해 순위를 매긴다면 최고 순위가 된다.

  1. 식별 가능한 숫자 중 당첨 된 숫자 개수를 count에 저장
  2. lottos 배열의 0(식별 불가능한 번호)의 개수를 zero 변수에 저장
  3. 당첨된 숫자 개수(count)의 등수를 answer[1]에 저장
  4. 당첨된 숫자 개수(count) + 식별 불가능한 0의 개수(zero)의 등수를 answer[0]에 저장

🔓 코드

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        // 식별 가능한 숫자 중 당첨된 숫자
        int count = 0;
        int zero = 0;
        for (int i = 0; i < lottos.length; i++) {
        	if (lottos[i] == 0) {
        		zero++;
        	} else {
        		for (int j = 0; j < win_nums.length; j++) {
        			if (lottos[i] == win_nums[j]) {
        				count++;
        			}
        		}
        	}
		}
        
        // 최저 순위
        answer[1] = rank(count);
        
        // 최고 순위
        answer[0] = rank(count + zero);
        
        return answer;
    }
    
    private int rank(int count) {
    	int r = 0;
    	switch (count) {
		case 0: case 1:
			r = 6; 
			break;
		case 2:
			r = 5; 
			break;
		case 3:
			r = 4; 
			break;
		case 4:
			r = 3; 
			break;
		case 5:
			r = 2; 
			break;
		case 6:
			r = 1; 
			break;
		}
    	return r;
    }
}

+)최고 순위, 최저 순위 구하는 코드 수정

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
		int[] answer = new int[2];

		// 식별 가능한 숫자 중 당첨된 숫자
		int count = 0;
		int zero = 0;
		for (int i = 0; i < lottos.length; i++) {
			if (lottos[i] == 0) {
				zero++;
			} else {
				for (int j = 0; j < win_nums.length; j++) {
					if (lottos[i] == win_nums[j]) {
						count++;
					}
				}
			}
		}

		// 최저 순위
		answer[1] = count > 1 ? 7 - count : 6;
        // count가 1이상이면 answer[1]에 7 - count한 값을,
        // 1이상이 아니라면 6을 저장

		// 최고 순위
		answer[0] = (count + zero) > 1 ? 7 - (count + zero) : 6;
        // (count + zero) 가 1이상이면 answer[0]에 7 - (count + zero)한 값을,
        // 1이상이 아니라면 6을 저장

		return answer;
	}
}
post-custom-banner

0개의 댓글