풀이
C++을 사용했다면 next_permutation()을 사용하고 싶었던 문제였지만, 자바로 문제를 풀기위해서 재귀함수를 통해 permutation을 구현하였습니다.
또한, 숫자를 뽑을때마다 규영이의 카드와 비교를 해주어 점수를 구하고 9장의 카드를 전부 뽑으면 승, 패를 결정하게 하여 해결하였습니다.
코드
import java.util.Scanner;
public class Solution {
public static boolean[] number;
public static int[] kCard = new int[9];
public static int winCnt, loseCnt;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; ++tc) {
int input;
number = new boolean[19];
for (int i = 0; i < 9; ++i) {
input = sc.nextInt();
number[input] = true;
kCard[i] = input;
}
winCnt = 0;
loseCnt = 0;
permutation(0, 0, 0);
System.out.println("#" + tc + " " + winCnt + " " + (9*8*7*6*5*4*3*2 - winCnt));
}
sc.close();
}
public static void permutation(int idx, int kScore, int iScore) {
if (idx >= 9) {
if (kScore > iScore) {
winCnt++;
}
return;
}
for (int i = 1; i < 19; ++i) {
if (!number[i]) {
number[i] = true;
int score = kCard[idx] + i;
if (kCard[idx] >= i) {
permutation(idx + 1, kScore + score, iScore);
}
else {
permutation(idx + 1, kScore, iScore + score);
}
number[i] = false;
}
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[Java] SWEA 6019번 기차사이의 파리 (0) | 2021.02.02 |
---|---|
[Java] SWEA 3376번 파도반 수열 (0) | 2021.02.01 |
[Java] SWEA 2805번 농작물 수확하기 (0) | 2021.01.31 |
[Java] SWEA 5215번 햄버거 다이어트 (0) | 2021.01.29 |
[Java] SWEA 8104번 조 만들기 (0) | 2021.01.26 |