Development Palette

[D3] n6808_규영이와인영이의카드게임 본문

Algorithm/SWEA

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

징주 2021. 8. 14. 02:53

흠.. 오래걸린다..

package com.ssafyalgo.w0812.n6808_규영이와인영이의카드게임;
// 비트마스킹..1
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution {
	static final int Pick  = 9;	// 인영이가 카드를 내는 경우의 수 : 9!
	static int [] results;
	static int winCnt = 0;
	static int loseCnt = 0;
	
	static int win = 0;
	static int lose= 0;
	//static boolean [] isSelected;
	
	private static void permutation(int cnt, int flag, int [] arr, ArrayList<Integer> kyu) {
		
		//한 라운드 종료
		if(cnt == Pick) {	//cnt == R일 때는 한가지 경우 완성// 9라운드 종료
			//System.out.println(Arrays.toString(results));
			
			for(int k=0;k<Pick;k++) {
				//규영 win
				if(results[k] <kyu.get(k)) winCnt += (results[k] +kyu.get(k));
				
				//인영 win
				else if(results[k] >kyu.get(k)) loseCnt += (results[k] +kyu.get(k));
			}

			if(winCnt>loseCnt)  win++;
			else if(winCnt<loseCnt)  lose++;

			winCnt = 0;
			loseCnt=0;
			return;
		}

		
		for(int i=0; i<Pick; i++) {
			
			if((flag & 1<<i ) !=0) continue;	//사용했던 카드면 패스
			
			//인영이가 내는 카드
			results[cnt] = arr[i];
			//isSelected[i] = true;
			
			permutation(cnt+1, flag | 1<<i,arr,kyu);
			//isSelected[i] = false;
		}
	
	}
	
	
	public static void main(String[] args) throws IOException {
		System.setIn(new FileInputStream("src\\com\\ssafyalgo\\w0812\\n6808_규영이와인영이의카드게임\\s_input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine());
		
		for(int t=1;t<=T; t++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			ArrayList <Integer> kyu = new ArrayList<>();
			int iny [] = new int [Pick];
			for(int i=0;i<Pick; i++) {
				int k = Integer.parseInt(st.nextToken());
				kyu.add(k);
			}
			
			int count =0;
			for(int i=1; i<=Pick*2; i++) {
				if(!kyu.contains(i))  iny[count++] = i;
			}
			
			//isSelected = new boolean[P];
			results = new int[Pick];
			win = 0;		//이전 테스트 초기화
			lose= 0;
			permutation(0,0,iny,kyu);

			bw.append("#" + t +" "+ win +" "+ lose + "\n");
		}
		
		bw.close();
	}

}

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AXqjxFI6_SQDFATi&contestProbId=AWgv9va6HnkDFAW0&probBoxId=AXs4aq5K3-IDFARW&type=PROBLEM&problemBoxTitle=08%EC%9B%9412%EC%9D%BC&problemBoxCnt=1 

 

'Algorithm > SWEA' 카테고리의 다른 글

n3289_서로소  (0) 2021.08.24
[D4] n1223_계산기2  (0) 2021.08.20
[D3] n9229 한빈이와 Spot Mart;  (0) 2021.08.10
[D3] n3499_퍼펙트셔플  (0) 2021.08.06
[D4] n1218_괄호짝짓기  (0) 2021.08.05
Comments