본문 바로가기

프로그래머스/JAVA

001. 로또의 최고 순위와 최저 순위[JAVA]

0. 사용 함수

  • Arrays.sort(정렬할 배열)
  • Arrays.binarySearch(배열, 찾을 변수 값) // 찾는 변수의 index리턴(0번 째부터 시작)
  • Math.max(값1, 값2) // 두 값 중에 큰 값을 리턴
  • Math.min(값1, 값2) // 두 값 중에 작은 값을 리턴

 

1. 문제 내용

  • 설명

민우가 로또(6/45)를 구매했는데,

민우의 동생이 로또에 낙서를 해서 일부 번호가 지워져 버렸다.

당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던

'최고 순위'와 '최저 순위'를 알아보고 싶어 졌습니다.

(알아볼 수 없는 번호를 0으로 설정)

 

  • 순위 당첨
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외
  • 제한 사항

lottos는 길이 6인 정수 배열입니다.
lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    0은 알아볼 수 없는 숫자를 의미합니다.
    0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
win_nums은 길이 6인 정수 배열입니다.
win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

 

 

2. 문제 풀이

import java.util.*;
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        //선언
        int zeroCount = 0;
        int sameCount = 0;
        //배열 정렬
        Arrays.sort(lottos);
        Arrays.sort(win_nums);
        //지워진 번호, 일치하는 번호 카운트
        for(int i = 0; i < lottos.length; i++){
            if(lottos[i] == 0){
                zeroCount++;
            } else{
                if(0<=Arrays.binarySearch(win_nums, lottos[i])){
                    sameCount++;
                }
            }
        }        
        int[] answer = {7-Math.max(sameCount+zeroCount,1), 7-Math.max(sameCount,1)};
        return answer;
    }
}

 

 

3. 채점 결과

  • 정확성 테스트
테스트 1 통과 (0.74ms, 58MB)
테스트 2 통과 (0.51ms, 57.7MB)
테스트 3 통과 (0.45ms, 58.1MB)
테스트 4 통과 (0.57ms, 57.8MB)
테스트 5 통과 (1.44ms, 58.6MB)
테스트 6 통과 (0.51ms, 58.5MB)
테스트 7 통과 (0.55ms, 57.3MB)
테스트 8 통과 (0.49ms, 57.8MB)
테스트 9 통과 (0.51ms, 58.1MB)
테스트 10 통과 (0.41ms, 56.4MB)
테스트 11 통과 (0.47ms, 59.4MB)
테스트 12 통과 (0.52ms, 59.4MB)
테스트 13 통과 (0.51ms, 58.4MB)
테스트 14 통과 (0.37ms, 58.1MB)
테스트 15 통과 (0.33ms, 56.9MB)

 

 


쉽다고 생각했는데 생각 외로 애먹었다ㅜㅜ

처음 코딩할 때는 Math함수를 안 쓰고 그냥 7에서 빼기로 빼버렸는데

민수 동생이 낙서로 다 지워버려서 (0,0,0,0,0,0)인 경우를 통과하지 못하길래

최저순위의 경우 Math함수로 1보다 작은 값은 리턴하지 못하도록 만들어서 뺐다.

 

그런데!!!!!!

최고순위에서 0이 나올 일은 없다고 생각하고

최고순위는 Math.max처리를 안 해주니 테스트 14에서 실패가 뜨는 것.

0이 없고 전부 다 틀린 경우 (1,2,3,4,5,6)(7,8,9,10,11,12)인 경우에는

최고 순위에서 0이 나올 수가 있더라..ㅎ

이것 때문에 헤매서 왠지 엄청 손해 본 기분.

'프로그래머스 > JAVA' 카테고리의 다른 글

008. 폰켓몬[JAVA]  (0) 2022.05.22
007. 체육복[JAVA]  (0) 2022.05.21
006. 모의고사[JAVA]  (0) 2021.12.30
004. 소수 만들기[JAVA]  (0) 2021.12.23
002. [카카오 인턴] 키패드 누르기[JAVA]  (0) 2021.12.18