프로그래머스 로또의 최고 순위와 최저 순위 JAVA 풀이 (완전탐색, 구현)

2026. 6. 29. 14:07·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

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

programmers.co.kr


📌 문제 개요

로또 번호 6개와 당첨 번호 6개가 주어진다.

구매한 로또 번호 중 0은 알아볼 수 없는 번호를 의미하며, 어떤 번호로도 변경될 수 있다.

 

이를 이용하여 당첨 가능한 최고 순위와 최저 순위를 배열로 반환하는 문제이다.


📌 접근 방법

로또 번호를 한 번 순회하면서 0의 개수와 당첨 번호와 일치하는 개수를 각각 계산한다.

  • 0은 어떤 번호든 될 수 있으므로 최고 순위는 일치 개수 + 0의 개수이다.
  • 최저 순위는 현재 일치한 개수 그대로 계산한다.

순위 계산은 별도의 메서드로 분리하여 처리하였다.


📌 핵심 아이디어

1. 0의 개수와 일치 개수를 동시에 계산

0은 비교할 필요가 없으므로 continue를 사용하여 다음 번호로 넘어간다.

당첨 번호를 찾으면 break를 사용하여 불필요한 비교를 줄였다.

for (int lotto : lottos) {
    if (lotto == 0) {
        zero++;
        continue;
    }

    for (int w : win_nums) {
        if (lotto == w) {
            win++;
            break;
        }
    }
}

2. 최고 순위와 최저 순위 계산

  • 최고 순위 : 현재 일치 개수 + 0의 개수
  • 최저 순위 : 현재 일치 개수
int[] result = {
    getRank(zero + win),
    getRank(win)
};

3. 순위 계산 공식 활용

순위 규칙은 다음과 같다.

static int getRank(int count) {
    return Math.min(6, 7 - count);
}
일치 개수 순위
6 1
5 2
4 3
3 4
2 5
1, 0 6

이를 이용하면

  • 7 - count로 기본 순위를 계산하고,
  • 0개 또는 1개 일치 시 7이 나오므로 Math.min(6, ...)을 사용하여 6등으로 처리할 수 있다.

복잡한 조건문 없이 한 줄로 순위를 계산할 수 있다.


📌 전체 코드

package level1;

import java.util.Arrays;

public class No67 {
    public static void main(String[] args) {
        int[] lottos = {44, 1, 0, 0, 31, 25};
        int[] win_nums = {31, 10, 45, 1, 6, 19};

        int zero = 0;
        int win = 0;

        for (int lotto : lottos) {
            if (lotto == 0) {
                zero++;
                continue;
            }

            for (int w : win_nums) {
                if (lotto == w) {
                    win++;
                    break;
                }
            }
        }

        int[] result = {
                getRank(zero + win),
                getRank(win)
        };

        System.out.println(Arrays.toString(result));
    }

    static int getRank(int count) {
        return Math.min(6, 7 - count);
    }
}
 

📄 정리

  • 로또 번호를 한 번 순회하면서 0의 개수와 일치 개수를 계산했다.
  • 최고 순위는 일치 개수 + 0의 개수, 최저 순위는 일치 개수를 사용했다.
  • Math.min(6, 7 - count) 공식을 활용하여 조건문 없이 순위를 계산했다.
  • continue와 break를 사용하여 불필요한 반복을 줄여 가독성과 효율성을 높였다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 완주하지 못한 선수 JAVA 풀이 (HashMap, 해시)  (0) 2026.07.01
프로그래머스 분수의 덧셈 JAVA 풀이 (수학, 구현, 유클리드 호제법)  (0) 2026.06.30
프로그래머스 동영상 재생기 JAVA 풀이 (구현, 시뮬레이션)  (0) 2026.06.28
프로그래머스 햄버거 만들기 JAVA 풀이 (스택, 구현)  (0) 2026.06.27
프로그래머스 대충 만든 자판 JAVA 풀이 (HashMap, 구현)  (0) 2026.06.26
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 완주하지 못한 선수 JAVA 풀이 (HashMap, 해시)
  • 프로그래머스 분수의 덧셈 JAVA 풀이 (수학, 구현, 유클리드 호제법)
  • 프로그래머스 동영상 재생기 JAVA 풀이 (구현, 시뮬레이션)
  • 프로그래머스 햄버거 만들기 JAVA 풀이 (스택, 구현)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    백준
    정보처리기사 실기 기출문제
    수학
    피보나치
    정렬
    정처기
    프로그래머스
    정처기실기
    level0
    java
    Level2
    자바
    코딩테스트
    배열
    springboot
    정처기오답노트
    자료구조
    level1
    dp
    알고리즘
    기출문제
    구현
    브루트포스
    시뮬레이션
    실기
    완전탐색
    solved.ac
    정보처리기사
    문자열
    백엔드개발자
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 로또의 최고 순위와 최저 순위 JAVA 풀이 (완전탐색, 구현)
상단으로

티스토리툴바