카테고리 없음
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;
}
}