1 λΆ„ μ†Œμš”

πŸ“ [D3_6808] κ·œμ˜μ΄μ™€ 인영이의 μΉ΄λ“œ κ²Œμž„

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution {
	static StringTokenizer st;
	static int win, lose;
	// 규영이 μΉ΄λ“œ
	static int[] arr;
	// 인영이 μΉ΄λ“œ
	static int[] arr_in;
	// μΈμ˜μ΄κ°€ λ‚Ό 수 μžˆλŠ” μΉ΄λ“œμ˜ λ°°μ—΄
	static int[] arr_in_card;
	// μΉ΄λ“œ 개수
	static int card = 9;
	// 18개의 μΉ΄λ“œ 쀑 κ°€μ Έκ°„ 것 μ°ΎκΈ° μœ„ν•΄
	static boolean[] isChecked;
	// permutation boolean
	static boolean[] check;
	static ArrayList<Integer> list;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		// ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€
		int T = Integer.parseInt(br.readLine());

		for (int tc = 1; tc <= T; tc++) {
			sb.append("#").append(tc).append(" ");

			// 규영이 μΉ΄λ“œ
			arr = new int[card];
			// 인영이 μΉ΄λ“œ
			arr_in = new int[card];
			isChecked = new boolean[19];
			
			// μ΅œμ’… 규영이 승 패 
			win = 0;
			lose = 0;
			
			// ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ λ§ˆλ‹€ μž…λ ₯
			st = new StringTokenizer(br.readLine(), " ");
			// 규영이의 μΉ΄λ“œ
			for (int i = 0; i < arr.length; i++) {
				arr[i] = Integer.parseInt(st.nextToken());
				// κ·œμ˜μ΄κ°€ κ°€μ Έκ°„ μΉ΄λ“œλ₯Ό 체크
				isChecked[arr[i]] = true;
			}

			// κ·œμ˜μ΄κ°€ 가지고 μžˆμ§€ μ•Šμ€ 것을 μΈμ˜μ΄μ—κ²Œ μ€€λ‹€
			int index = 0;
			for (int i = 1; i < isChecked.length; i++) {
				if (isChecked[i]) {
					continue;
				} else {
					arr_in[index] = i;
					index++;
				}
			}
			check = new boolean[card];
			arr_in_card = new int[arr_in.length];
			permutation(0);

			// 규영이의 승패
			sb.append(win).append(" ").append(lose).append("\n");
		}
		System.out.println(sb);
	}

	// 인영이 λ°°μ—΄
	static void permutation(int index) {
		// 기저쑰건
		if (index == arr.length) {

			// 규영이, 인영이 점수 합계
			int gyu_sum = 0;
			int in_sum = 0;

			for (int i = 0; i < arr.length; i++) {
				if (arr[i] > arr_in_card[i]) {
					gyu_sum += arr[i] + arr_in_card[i];
				} else {
					in_sum += arr[i] + arr_in_card[i];
				}
			}
			// κ²°κ΅­ μ΄κ²ΌλŠ”μ§€ μ‘ŒλŠ”μ§€ νŒλ‹¨
			if (gyu_sum > in_sum) {
				win++;
			} else if (in_sum > gyu_sum) {
				lose++;
			}

			return;
		}

		for (int i = 0; i < arr.length; i++) {
			if(!check[i]) {
				arr_in_card[index] = arr_in[i];
				check[i] = true;
				permutation(index+1);
				// μ—­νŠΈλž˜ν‚Ή
				check[i] = false;
			}
		}

	}
}

πŸ€” λ‚˜μ˜ 생각

μˆœμ„œκ°€ μƒκ΄€μžˆλŠ” 뽑기이기 λ•Œλ¬Έμ— μˆœμ—΄ 계산법을 μ‚¬μš©ν•˜μ˜€λ‹€.
μ²˜μŒμ— 문제λ₯Ό κ·œμ˜μ΄κ°€ 9개λ₯Ό κ°€μ Έκ°€κ³  이제 μΈμ˜μ΄λŠ” 18κ°œμ—μ„œ μƒˆλ‘­κ²Œ 9개λ₯Ό λ½‘λŠ” 쀄 잘λͺ» μ•Œμ•„μ„œ μ‹œκ°„ μ΄ˆκ³Όκ°€ 뜨길래 μ™œμΈκ°€ ν–ˆλ‹€.. γ…‹γ…‹>
문제λ₯Ό 천천히.. 꼼꼼히 읽도둝 ν•˜μž !!