[JAVA 문제 풀이] 297. 로또의 최고 순위와 최저 순위

프로그래머스 (77484)
Stupefyee's avatar
Jun 03, 2025
[JAVA 문제 풀이] 297. 로또의 최고 순위와 최저 순위
notion image
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int[] solution(int[] lottos, int[] win_nums) { // 당첨 번호를 Set에 저장하여 빠르게 비교할 수 있게 함 Set<Integer> winSet = new HashSet<>(); for (int num : win_nums) { winSet.add(num); } int zeroCount = 0; // 알아볼 수 없는 숫자 (0)의 개수 int matchCount = 0; // 실제로 당첨 번호와 일치한 숫자의 개수 for (int num : lottos) { if (num == 0) { zeroCount++; } else if (winSet.contains(num)) { matchCount++; } } // 최고 순위는 0까지 모두 맞췄다고 가정한 경우 int maxMatch = matchCount + zeroCount; // 최저 순위는 실제 일치한 것만 본 경우 int minMatch = matchCount; // 최고 순위와 최저 순위를 배열로 반환 return new int[] { getRank(maxMatch), getRank(minMatch) }; } // 맞은 개수(count)에 따른 순위 계산 private int getRank(int count) { // 6개 → 1등, 5개 → 2등 ... 2개 → 5등 if (count >= 2) { return 7 - count; } // 0개 또는 1개 맞으면 6등 return 6; } }
 

다른 사람의 코드

import java.util.*; class Solution { public int[] solution(int[] lottos, int[] win_nums) { Map<Integer, Boolean> map = new HashMap<Integer, Boolean>(); // 번호와 존재 여부를 저장하는 맵 int zeroCount = 0; // 0의 개수를 세기 위한 변수 for(int lotto : lottos) { if(lotto == 0) { zeroCount++; continue; } map.put(lotto, true); } int sameCount = 0; // 당첨 번호와 일치하는 번호의 개수를 세기 위한 변수 for(int winNum : win_nums) { if(map.containsKey(winNum)) sameCount++; } int maxRank = 7 - (sameCount + zeroCount); int minRank = 7 - sameCount; // 낙첨 처리 if(maxRank > 6) maxRank = 6; if(minRank > 6) minRank = 6; return new int[] {maxRank, minRank}; } }
 
Share article

stupefyee