본문 바로가기

숨막히는 알고말고/문제 풀이

[SWEA] 규영이와 인영이의 카드게임

👀 문제 설명

문제

로그인해야 문제를 볼 수 있다.

 

✍🏻풀이

인영이의 카드로 순열을 구하고, 순열을 구할 때마다 누가 이기는지 구해주면 된다!

 

코드

package swea;

// 규영이와 인영이의 카드게임 (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0&categoryId=AWgv9va6HnkDFAW0&categoryType=CODE&problemTitle=6808&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 )

import java.util.*;
import java.io.*;

public class SWEA_6808 {
	
	private static final int fact = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2;
	private static int[] a = new int[9];
	private static int[] b = new int[9];
	private static int aWin;
	private static int same;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		int T = Integer.parseInt(br.readLine());

		for (int tc = 1; tc <= T; tc++) {
			aWin = 0;
			same = 0;
			
			st = new StringTokenizer(br.readLine());
			int[] cards = new int[19];
			
			for (int i = 0; i < 9; i++) {
				int cardNum = Integer.parseInt(st.nextToken());
				a[i] = cardNum;
				cards[cardNum] = 1;
			}
			
			int idx = 0;
			for (int i = 1; i <= 18; i++) {
				if (cards[i] != 1) {
					b[idx] = i;
					idx++;
				}
			}
			
			// solve
			permutation(0, new int[9], new boolean[9]);
			bw.write("#" + tc + " " + aWin + " " + (fact - aWin - same));
			bw.newLine();
		}

		bw.flush();
		bw.close();
	}
	
	private static void permutation(int cnt, int[] selected, boolean[] visited) {
		if (cnt == 9) {
			int aNum = 0;
			int bNum = 0;
			
			for (int i = 0; i < 9; i++) {
				if (a[i] > selected[i]) { // 규영이가 이김 
					aNum += a[i] + selected[i];
				}
				else { // 규영이가 짐
					bNum += a[i] + selected[i];
				}
			}
			
			if (aNum > bNum) {
				aWin++;
			}
			else if (aNum == bNum) {
				same++;
			}
			
			return;
		}
		
		for(int i = 0; i < b.length; i++) {
			if(!visited[i]) {
				visited[i] = true;
				selected[cnt] = b[i];
				permutation(cnt + 1 , selected, visited);
				visited[i] = false;
			}
		}
	}

}