백준 숫자 게임

KIMYEONGJUN·2025년 4월 28일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 줄에는 사람의 수를 나타내는 정수 N이 주어진다.
N은 2이상 1,000이하이다.
그 다음 N 줄에는 1번부터 N번까지 각 사람이 가진 카드가 주어지는 데, 각 줄에는 1부터 10사이의 정수가 다섯 개씩 주어진다.
각 정수 사이에는 한 개의 빈칸이 있다.

게임에서 이긴 사람의 번호를 첫 번째 줄에 출력한다.
이긴 사람이 두 명 이상일 경우에는 번호가 가장 큰 사람의 번호를 출력한다.

내가 이 문제를 보고 생각해본 부분

각 사람마다 5장의 카드에서 3개를 고르는 모든 조합을 확인하며 최대 일의 자리 수를 찾는다.
최대 일의 자리 수가 여러 명일 경우, 번호가 가장 큰 사람을 출력하도록 조건을 설정해준다.
BufferedReader와 StringTokenizer를 사용해 빠른 입출력을 구현한다ㅈ.

코드로 구현

package baekjoon.baekjoon_28;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

// 백준 2303번 문제
public class Main1005 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int winner = 0;
        int maxLastDigit = -1;

        for(int i = 1; i <= N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int[] cards = new int[5];
            for(int j = 0; j < 5; j++) {
                cards[j] = Integer.parseInt(st.nextToken());
            }

            int localMax = -1;
            // 5장 중 3장 선택: 3중 for문으로 조합 구현
            for(int a = 0; a < 3; a++) {
                for(int b = a + 1; b < 4; b++) {
                    for(int c = b + 1; c < 5; c++) {
                        int sum = cards[a] + cards[b] + cards[c];
                        int lastDigit = sum % 10;
                        if(lastDigit >= localMax) {
                            localMax = lastDigit;
                        }
                    }
                }
            }

            // 최대 일의 자리 수 갱신 및 번호 비교
            if(localMax > maxLastDigit) {
                maxLastDigit = localMax;
                winner = i;
            } else if(localMax == maxLastDigit && i > winner) {
                // 같은 최대값일 때 번호가 더 큰 사람 선택
                winner = i;
            }
        }

        System.out.println(winner);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글