카테고리 없음

SWEA 5203 베이비진 게임(알고리즘보단 문제 해독이 중요)

성추 2025. 4. 16. 21:42

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제 해독을 뭐같이 해서 계속 틀렸었다.

1 1 2 2 3 3 카드를 A가 가지고 있으면 이건 A가 이긴거다. 

" 연속인 숫자가 3개 이상이면 run, 같은 숫자가 3개 이상이면 triplet이라고 한다." 에서 연속인 숫자란 

무조건 배열에서 연속이 아니라 1 1 2 2 3 3 과 같은 완벽히 연속되진 않더라도 연속된 숫자가 있긴 하니까 상관없는 것이다.

하아...

 

또한 A가 먼저 시작해서 A는 true, B도 true가 나왔으면 무승부가 아니라 A가 승리한거다.

공정성은 개나줘버린 게임

 

문제 발문보고 좀 애매해서 당연히 A true , B true이면 무승부하고 끝내겠거니 했는데 아니였다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

class Main
{
    static int T;
    //연속된 숫자 == 112233 같은 경우도 되는거임...
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= T; tc++) {
            String[] s = br.readLine().split(" ");
            int ans=0;
            boolean flagA = false;
            boolean flagB = false;
            game:
            for(int i=0; i<12; i=i+2){
                int index=0;

                int[] a = new int[(i/2)+1];
                int[] b = new int[(i/2)+1];

                for(int j=0; j<=i; j=j+2){
                    a[index] = Integer.parseInt(s[j]);
                    b[index] = Integer.parseInt(s[j+1]);
                    index++;
                }
                Arrays.sort(a);
                Arrays.sort(b);

                flagA = triplet(a) || run(a);
                flagB = triplet(b) || run(b);

                if(flagA && flagB){
                    ans=0;
                    break game;
                }
                else if(flagA){
                    ans=1;
                    break game;
                }
                else if(flagB){
                    ans=2;
                    break game;
                }
                else{
                    continue game;
                }
            }
            System.out.printf("#%d %d\n", tc,ans);
        }
    }
    public static boolean triplet(int[] arr) {
        for(int i=0; i<arr.length-2; i++) {
            if(arr[i] == arr[i+1] && arr[i+1]==arr[i+2]){
                return true;
            }
        }
        return false;
    }
    public static boolean run(int[] arr){
        for(int i=0; i<arr.length-2; i++) {
            if(arr[i]+1 == arr[i+1] && arr[i+1]+1 == arr[i+2]){
                return true;
            }
        }
        return false;
    }



}

이건 문제를 잘못 해석해서 못푼 풀이다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

class Main
{
    static int T;
    static int[] A;
    static int[] B;
    //연속된 숫자 == 112233 같은 경우도 되는거임...
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= T; tc++) {
            String[] s = br.readLine().split(" ");
            int ans=0;
            A = new int[10];
            B = new int[10];
            boolean flagA = false;
            boolean flagB = false;
            game:
            for(int i=0; i<12; i=i+2){
                int a = Integer.parseInt(s[i]);
                int b = Integer.parseInt(s[i + 1]);
                A[a]++;
                B[b]++;

                flagA = triplet(A) || run(A);
                flagB = triplet(B) || run(B);

                if (flagA) {
                    ans = 1;
                    break game;
                } else if (flagB) {
                    ans = 2;
                    break game;
                } else {
                    continue game;
                }

            }
            System.out.printf("#%d %d\n", tc,ans);
        }
    }
    public static boolean run(int[] arr) {
        for(int i=0; i<8; i++) {
            if(arr[i] >0 && arr[i+1] > 0 && arr[i+2]>0){
                return true;
            }
        }
        return false;
    }
    public static boolean triplet(int[] arr){
        for(int i=0; i<10; i++) {
            if(arr[i] >=3){
                return true;
            }
        }
        return false;
    }



}