본문 바로가기

컴퓨터/프로그래머스

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

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 코드

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        int zero = 0;
        int same = 0;
        for(int n : lottos) {
            if(n == 0) {
                zero++;
                continue;
            }
            for(int win : win_nums) {
                if(n == win) {
                    same++;
                    break;
                }
            }
        }
        answer[0] = Math.min(7 - zero - same, 6);
        answer[1] = Math.min(7 - same, 6);
        return answer;
    }
}

2. 설명

int zero = 0;
int same = 0;

zero는 알 수 없는 번호의 수이며, same은 구매한 로또의 번호와 당첨 번호의 일치하는 갯수이다.

for(int n : lottos) {
    if(n == 0) {
        zero++;
        continue;
    }
    for(int win : win_nums) {
        if(n == win) {
            same++;
            break;
        }
    }
}

반복문을 통해서 로또의 번호가 0이라면 zero를 증가시키고, 다음 수로 넘어가며 당청 번호와 동일한 번호를 찾으면 same을 증가시킵니다.

answer[0] = Math.min(7 - zero - same, 6);
answer[1] = Math.min(7 - same, 6);
return answer;

answer[0]에는 최고의 순위를 저장하며 answer[1]에는 최저의 순위를 저장하면 문제는 해결됩니다. Math.min을 사용한 이유는 6이하의 순위는 전부 6위이기에 사용되었습니다.

3. 정리

  1. 최고의 순위와 최저의 순위는 특별한 조건이 없기에 쉽게 해결이 가능하다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges