[Java] 로또의 최대 순위와 최저 순위 Lv1

Date:     Last Updated:

로또의 최고 순위와 최저 순위

문제 프로그래머스 FAQ 내용을 보니 카카오나 기업의 문제들은 저작권이 있으니 풀이를
github나 개인블로그에 올리지 말라고 되어 있어서 링크로 대체합니다.

출처: Programmers
로또의 최고 순위와 최저 순위

문제의 이해

저번에 살짝 봤을 때는 어려워 보였는데 자세히 보니까 엄청나게 쉬운 문제였다. 다만 푸는 방법은 여러개가 있을 것 같았는데 나는 내가 생각한 가장 기본적인 방법, 2중 반복문으로 풀었다.

내가 생각한 풀이 방법

  1. 0개와 1개를 맞췄을 때는 모두 6등이지만 계산을 할 때는 0개인지 1개인지 판별해야 하기 때문에 최저 순위를 7로 변수에 저장
  2. lottos 배열과 win_nums를 비교해서 같은 번호가 있으면 7에서 -1씩 하고
  3. 만약 lottos배열에 0이 존재한다면 0만 따로 세는 cnt를 만들어 +1씩 저장해둠.
  4. 만약 0이 한개도 없다면 최저값을 7이므로 6으로 바꿔주고, 0이 한개도 없고 맞춘 숫자도 1개도 없다면 역시 7이므로 6으로 바꿔준다.
  5. 구한 값을 answer배열에 저장해서 출력

풀이

첫번째 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        int lottosRanking = 7;  //6등은 1개와 0개 당첨이기 때문에 랭킹은 7부터 시작하도록 지정
        int zeroCount = 0;      //0의 갯수를 세는 변수
        for(int i = 0; i < lottos.length; i++){
            if(lottos[i] == 0 ){    //반복문을 돌다가 0을 발견하면 zeroCount를 증가시키고 continue
                zeroCount++;
                continue;
            }
            for(int j = 0; j < win_nums.length; j++){
                if(lottos[i] == win_nums[j]){       //같은 숫자를 발견했을 시 lottosRanking을 -1시켜서 순위를 증가시킴
                    lottosRanking--;
                }
            }
        }
            
        //0이 아예 없어거나 0만 있을 경우는 lottosRanking이 7이기 때문에 삼항연산자로 6으로 조정해줌
        answer[0] = lottosRanking - zeroCount > 6 ? 6 : lottosRanking - zeroCount ;
        answer[1] = lottosRanking > 6 ? 6 : lottosRanking;
        return answer;
    }
}

뭔가 처음에 생각한대로 풀것은 맞는 것 같은데 코드의 가독성과 코드를 효율적으로 썼는가에 대해서는 아주 회의적이다. 특히 다른 분들의 코드를 봤을 때 내 코드가 너무 조악해보인다. 가독성과 효율성을 좀 생각하면서 작성하자. 특히 가독성이 제일 중요하다.


Leave a comment