99클럽 코테 스터디 39일차 TIL / [프로그래머스] 로또의 최고 순위와 최저 순위

전종원·2024년 8월 29일
0

오늘의 학습 키워드


Hash

문제


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

  • 플랫폼: 프로그래머스
  • 문제명: 로또의 최고 순위와 최저 순위
  • 난이도: Lv1

풀이


import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        Set<Integer> winSet = new HashSet<>();
        
        for(int win_num : win_nums) {
            winSet.add(win_num);
        }
        
        int matchedCnt = 0;
        int unknownCnt = 0;
        for(int lotto : lottos) {
            if(lotto == 0) {
                unknownCnt++;
            } else if(winSet.contains(lotto)) {
                matchedCnt++;
            }
        }
        
        int[] answer = new int[2];
        answer[0] = 7 - (matchedCnt + unknownCnt);
        answer[1] = 7 - matchedCnt;
        
        answer[0] = answer[0] > 6 ? 6 : answer[0];
        answer[1] = answer[1] > 6 ? 6 : answer[1];
        
        return answer;
    }
}

접근

  • 로또 번호 일부가 지워졌을 때, 당첨 가능한 최고 / 최저 순위를 구하는 문제였습니다.
  • 최고와 최저는 다음과 같이 생각할 수 있습니다.
    • 최고 = 지워지지 않은 로또 번호 중 정답과 일치한 개수 + 지워진 번호 개수
    • 최저 = 지워지지 않은 로또 번호 중 정답과 일치한 개수
  • Set을 사용하여, 정답과 일치하는 지를 O(n) 시간복잡도로 처리했습니다.

소요 시간

20분

0개의 댓글