-
[프로그래머스] 로또의 최고 순위와 최저 순위 자바 Map과 Math.max코딩테스트 2025. 4. 4. 16:15반응형
https://school.programmers.co.kr/learn/courses/30/lessons/77484
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
로또 당첨번호와 내 로또 번호가 있다. 내 로또번호는 동생에 의해 n개가 훼손되어 알아볼 수 없는 숫자가 존재할 수 있는 상황이다. (0 <= n <= 6)
이 때, 내가 기대할 수 있는 최고 등수와 최저 등수를 배열에 담아 반환하시오.
(6개 : 1등, 5개 : 2등 4개: 3등 3개: 4등 2개: 5등 1개 이하 : 6등)
제한사항
-lottos는 길이 6인 정수 배열입니다.
-lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
-0은 알아볼 수 없는 숫자를 의미합니다.
-0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
-lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
-win_nums은 길이 6인 정수 배열입니다.
-win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
-win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
-win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.접근
우선 순위정보를 담은 Map을 하나 만들고 당첨 번호와 내 번호의 매치되는 갯수를 센다. 또한 지워진 숫자의 갯수또한 세고난 후, 지워진 숫자의 갯수가 0 이상이면 최고등수를 별도로 계산하여 배열에 담고 그 외의 처리또한 별도로 처리함.
public int[] solution(int[] lottos, int[] win_nums) { Arrays.sort(win_nums); Arrays.sort(lottos); int matchCnt = 0; int zeroCnt = 0; Map<Integer, Integer> ranks = new HashMap<>(); //순위 정보 저장 for(int i = 0; i <= 6; i++){ ranks.put(i, Math.min(6, 7 - i)); } //일치 갯수 계산 for(int winNum : win_nums){ for (int lotto : lottos) { if (winNum == lotto) matchCnt++; } } //0 갯수 계산 for(int num : lottos){ zeroCnt += num == 0 ? 1 : 0; } int[] answer = {}; //지워진 숫자 갯수 유무에 따라 별도 처리 int rank = ranks.get(matchCnt); if(zeroCnt > 0){ int maxRank = Math.max(rank - zeroCnt, 1); answer = new int[]{maxRank, rank}; } else { answer = new int[]{rank, rank}; } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 자바 정규식 활용 (0) 2025.04.04 [프로그래머스] 음양 더하기 자바 (0) 2025.04.04 [프로그래머스] 약수의 개수와 덧셈 제곱근방식 (0) 2025.04.04 [프로그래머스] 숫자 문자열과 영단어 자바 문자비교 (0) 2025.04.04 [프로그래머스] 부족한 금액 계산하기 자바 등차수열의 합 (0) 2025.04.04