[프로그래머스|JAVA] 로또의 최고 순위와 최저 순위 | Set 활용, 향상된 for문 연습 중 💬, case 문

2025. 8. 14. 23:11·💻코딩/💡Programmers
728x90
반응형

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

 


 

📍 코드

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        Set<Integer> winSet = new HashSet<>();
        
        for (int w : win_nums) {
            winSet.add(w);
        }

        int zeroCnt = 0; // 0의 개수
        int matchCnt = 0; // 일치 개수

        for (int n : lottos) {
            if (n == 0) {
                zeroCnt++;
            } else if (winSet.contains(n)) {
                matchCnt++;
            }
        }

        int max = getRank(matchCnt + zeroCnt);
        int min = getRank(matchCnt);

        return new int[]{max, min};
    }

    private int getRank(int cnt) {
        switch (cnt) {
            case 6: return 1;
            case 5: return 2;
            case 4: return 3;
            case 3: return 4;
            case 2: return 5;
            default: return 6;
        }
    }
}

💡 접근법

  • 알 수 없는 수 제외하고 맞는 수 ➡️ 최소
  • 알 수 없는 수 포함하고 맞는 수 ➡️ 최대

  • set() 활용
  • set()에 로또 번호를 담는다.
  • 내가 선택한 로또 번호의 알 수 없는 수(0)를 카운트한다. (zeroCnt)
  • 내가 선택한 로또 번호가 set()에 담긴 번호에 포함되는지 확인한다. (contains())
  • 포함하면 카운트 한다. (matchCnt)
  • getRank() 메서드를 생성하여 맞은 수에 따른 등수를 반환한다.
  • 이후 max와 min 값을 반환하면 답이다.

 


 

case문을 활용하고 코드가 길어져서

효율성 테스트에서 통과되지 않을까 걱정했지만,

다행히 효율성 테스트는 없었다고 한다..😂

 

하지만, 생각해보면 입력 값의 데이터 크기가 고정된 문제이므로 

시간 복잡도는 O(1) 정도이다.

그러므로 꽤 괜찮은 것 같다 !

 

 

 

 

728x90
반응형

'💻코딩 > 💡Programmers' 카테고리의 다른 글

[프로그래머스|JAVA] 올바른 괄호 | 스택 사용 ⭕️ | 간단 풀이 | 스택 사용 ❌ 방법 | 풀이법 2️⃣가지  (2) 2025.08.24
[프로그래머스|JAVA] 주식 가격 | 스택 / 큐 사용 ❌ | 간단 풀이 | 스택 / 큐 방법 포함 ⭕️ | 풀이법 2️⃣가지  (4) 2025.08.24
[프로그래머스|JAVA] 같은 숫자는 싫어 🙅‍♀️ | ArrayList, stream 방식, 향상된 for문 활용  (1) 2025.08.14
[프로그래머스|JAVA] 의상 | 2️⃣번째 풀이 | Map 활용하여 간결 & 가독성 좋게 💡 , 향상된 for문, getOrDefault()  (4) 2025.08.14
[프로그래머스|JAVA] 완주하지 못한 선수 | Map 사용 ⭕️ , getOrDefault(), 향상된 for문 연습 중💬, iterator() 활용  (2) 2025.08.14
'💻코딩/💡Programmers' 카테고리의 다른 글
  • [프로그래머스|JAVA] 올바른 괄호 | 스택 사용 ⭕️ | 간단 풀이 | 스택 사용 ❌ 방법 | 풀이법 2️⃣가지
  • [프로그래머스|JAVA] 주식 가격 | 스택 / 큐 사용 ❌ | 간단 풀이 | 스택 / 큐 방법 포함 ⭕️ | 풀이법 2️⃣가지
  • [프로그래머스|JAVA] 같은 숫자는 싫어 🙅‍♀️ | ArrayList, stream 방식, 향상된 for문 활용
  • [프로그래머스|JAVA] 의상 | 2️⃣번째 풀이 | Map 활용하여 간결 & 가독성 좋게 💡 , 향상된 for문, getOrDefault()
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    프로그래머스
    자료구조
    알고리즘
    코딩테스트
    github
    GIT
    Java
    데브코스
    S3
    Set
    트랜잭션
    프로그래머스 #JAVA
    AWS
    Stream
    자바
    map
    네트워크
    baekjoon
    백엔드
    동시성제어
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[프로그래머스|JAVA] 로또의 최고 순위와 최저 순위 | Set 활용, 향상된 for문 연습 중 💬, case 문
상단으로

티스토리툴바