코딩테스트/Java

(프로그래머스) 로또의 최고순위와 최저 순위

SK_MOUSE 2021. 7. 19. 14:48
반응형

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

해시로 푸는 문제이다.

 

탐색알고리즘중에서 해시 알고리즘이 빠르다.

시간복잡도 계산

해시함수를 이용해서 탐색하면 시간이 알고리즘 수행시간이 입력 데이터 수와 관계없이 일정하다.

다른 탐색을 하기위해 정렬 비용과 탐색비용을 합치면 효율성이 떨어진다.

 

따라서 해시를 이용한 탐색을 하는 습관을 들여야한다.

 

필자의 답

import java.util.*;

class Solution {
    static int[] answer = new int[2];
    public int[] solution(int[] lottos, int[] win_nums) {

        HashMap<Integer, Boolean> hm = new HashMap<>();
        int zeroCount=0;
        for(int n : lottos){
            if(n==0) zeroCount++;
            else hm.put(n, true);
        }

        int count=0;
        for(int w : win_nums){
            if(hm.getOrDefault(w,false)) count++;
        }
        score(count,1);//최저순위
        score(count+zeroCount, 0);

        return answer;
    }
    static void score(int count, int index){
        switch (count){//최저순위
            case 6:
                answer[index]=1;
                break;
            case 5:
                answer[index]=2;
                break;
            case 4:
                answer[index]=3;
                break;
            case 3:
                answer[index]=4;
                break;
            case 2:
                answer[index]=5;
                break;
            default:
                answer[index]=6;
                break;
        }
    }
}

 

 

숏코딩하신분의 답

import java.util.Arrays;
import java.util.stream.LongStream;

class Solution {
    public int[] solution(int[] lottos, int[] winNums) {
        return LongStream.of(
                (lottos.length + 1) - Arrays.stream(lottos)
                .filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l) || l == 0).count(),
                (lottos.length + 1) - Arrays.stream(lottos)
                .filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l)).count()
        )
                .mapToInt(op -> (int) (op > 6 ? op - 1 : op))
                .toArray();
    }
}

 

반응형

'코딩테스트 > Java' 카테고리의 다른 글

(프로그래머스) 다단계 칫솔  (0) 2021.07.29
(프로그래머스) 행렬 테두리 회전하기  (0) 2021.07.20
[JAVA] 백준 원판 돌리기  (0) 2021.07.08
[JAVA] 백준 톱니바퀴  (0) 2021.07.06
[JAVA] 백준 스타트택시  (0) 2021.06.16