새소식

항해 99 TIL

99클럽 코테 스터디 39일차 TIL [Greedy]

  • -

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

 

내가 작성한 코드는 아래와 같다.

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i=1; i<=6; i++) {
            map.put(7-i, i);
        }
        
        int[] answer = new int[2];
        int zeroCount = 0;
        int minEqualCount = 0;
        for(int i=0; i<lottos.length; i++) {
            if(lottos[i] == 0) {
                zeroCount++;
                continue;
            }
            
            for(int j=0; j<win_nums.length; j++) {
                if(lottos[i] == win_nums[j]) {
                    minEqualCount++;
                    break;
                }
            }
        }

        if(minEqualCount < 2) answer[1] = 6;
        else {
            answer[1] = map.get(minEqualCount);
        }
        
        if(zeroCount == 0) {
            answer[0] = answer[1];
        } else {
            answer[0] = map.get(zeroCount + minEqualCount);
        }
        return answer;
    }
}

 

[풀이 과정]

순위 당첨 내용
1 - 6개 번호가 모두 일치
2 - 5개 번호가 일치
3 - 4개 번호가 일치
4 - 3개 번호가 일치
5 - 2개 번호가 일치
6 - (낙첨) 그 외

 

1. 로또에 맞춘 개수로, 순위를 저장하므로 이를 Map에 저장한다.

2. lottos[] 배열을 순회하며, 0의 개수와, 일치하는 개수를 따로 세어준다.

3. 일치하는 개수가 2개 이하면, 낙첨이므로 순위6을 answer[1]에 저장해준다. 그렇지 않은 경우, Map에 저장해놓았던 값을 토대로 순위를 가져와 answer[1]에 저장한다.

4. 0의 개수가 없다면, answer[1]의 값을 그대로 answer[0]에 저장해주면 되고, 하나라도 있다면 일치하는 개수와 합산해서 Map에서 해당하는 순위를 찾아서 answer[0]에 저장해주면 된다.

 

문제 조건을 올바르게 이해했다면 LV 1인 만큼 쉽게 풀이할 수 있는 문제였다.

풀이 시간 : 20분

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.