본문 바로가기

verdantjuly/코딩테스트

프로그래머스 코딩테스트 연습 : 로또의 최고 순위와 최저 순위 (20240315, java)

728x90

 

문제 바로가기: https://school.programmers.co.kr/learn/courses/30/lessons/77484

나의 풀이

import java.util.*;

// GPT의 도움을 받아 품
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        // Remove zeros from lottos
        int zero = 0;
        Set<Integer> notZeroSet = new HashSet<>();
        for (int num : lottos) {
            if (num != 0) {
                notZeroSet.add(num);
            } else {
                zero++;
            }
        }

        // Count the matches
        int matches = 0;
        for (int num : win_nums) {
            if (notZeroSet.contains(num)) {
                matches++;
            }
        }

        // Calculate ranks
        int bestRank = (matches == 0) ? 6 : 7 - (matches + zero);
        int worstRank = (matches == 0) ? 6 : 7 - matches;

        if (zero == 6){
            bestRank = 1;
        }
        return new int[]{bestRank, worstRank};
    }
}

 

다른 사람의 풀이


import java.util.HashMap;
import java.util.Map;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
        int zeroCount = 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};
    }
}

 

소감

 

너무 어렵다