728x90
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.util.Scanner;
class Solution {
static int N = 18;
static int R = 9;
static int gu[]; // 규영 점수
static int in[]; // 인영 점수
static boolean isSelected[]; // 선택 여부
static int rem_card[]; // 남은 숫자들
static int win; // 이긴 횟수
public static void game(int cnt) {
if (cnt == R) { // base case
int gu_point = 0;
int in_point = 0;
for (int i = 0; i < R; i++) {
if (gu[i] > in[i]) {
gu_point += gu[i] + in[i];
} else {
in_point += gu[i] + in[i];
}
}
if (gu_point > in_point)
win++;
return;
}
for (int i = 0; i < R; i++) {
if (isSelected[i]) {
continue;
}
in[cnt] = rem_card[i]; //이 부분 중요
isSelected[i] = true;
game(cnt + 1);
isSelected[i] = false;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int tc = 1; tc <= t; tc++) {
gu = new int[9];
in = new int[9];
isSelected = new boolean[9];
rem_card = new int[9];
win = 0;
int idx = 0;
boolean cnt[] = new boolean[18];
// 규영이한테 숫자 넣고, 남은 숫자 배열 관리하기
for (int i = 0; i < R; i++) {
gu[i] = sc.nextInt();
cnt[gu[i] - 1] = true;
}
for (int i = 0; i < N; i++) {
if (cnt[i] == true)
continue;
rem_card[idx++] = i + 1; // 남은 숫자들 rem_card에 들어감
}
game(0);
System.out.println("#" + tc + " " + win + " " + (362880 - win));
}
}
}
참고
728x90
'SW Expert Academy > SWEA D3' 카테고리의 다른 글
| [SW Expert Academy] 퍼펙트 셔플 (D3) (0) | 2024.09.11 |
|---|---|
| [SW Expert Academy] [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (D3) (0) | 2024.09.09 |
| [SW Expert Academy] 다솔이의 다이아몬드 장식 (D3) (1) | 2024.09.08 |
| [SW Expert Academy] 극장 좌석 (D3) (0) | 2024.09.08 |
| [SW Expert Academy] 구구단 1 (D3) (0) | 2024.09.08 |