뚱땅뚱땅

[문제] SWEA 6808번 규영이와 인영이의 카드게임 본문

알고리즘/swea

[문제] SWEA 6808번 규영이와 인영이의 카드게임

양순이 2021. 2. 15. 13:02
728x90

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

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

풀이

 

순열 문제

 

public class SWEA_6808 {
	static int[] gyu;
	static int[] inyoung;
	static int win = 0, lose = 0;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(in.readLine());
		
		for(int t=1;t<=T;t++) {
			boolean numbers[] = new boolean[19];
			gyu = new int[9];
			inyoung = new int[9];
			StringTokenizer st = new StringTokenizer(in.readLine()," ");
			// init 규영
			for(int i=0;i<9;i++) {
				int tmp = Integer.parseInt(st.nextToken());
				gyu[i] = tmp;
				numbers[tmp] = true;
			}
			//init 인영
			int j =0;
			for(int i=1;i<=18;i++) {
				if(!numbers[i]) {
					inyoung[j] = i;
					j++;
				}
			}
			win = 0; lose = 0;
			perm(0,new int[9],new boolean[9]);
			sb.append("#").append(t).append(" ").append(win).append(" ").append(lose).append("\n");
		}
		System.out.println(sb);
	}
	
	static void perm(int toSelect, int[] selected, boolean[] visited) {
		if(toSelect == 9) {
			int scoreG = 0;	// 규영이 점수 합
			int scoreI = 0;	// 인영이 점수 합
			for(int i=0;i<9;i++) {
				if(gyu[i]>selected[i])
					scoreG += (gyu[i]+selected[i]);
				else
					scoreI += (gyu[i]+selected[i]);
			}
			if(scoreG>scoreI) win++;
			else if(scoreG<scoreI) lose++;
			return;
		}
		for(int i=0;i<9;i++) {
			if(!visited[i]) {
				visited[i] = true;
				selected[toSelect] = inyoung[i];
				perm(toSelect+1, selected, visited);
				visited[i] = false;
			}
		}
	}
}
728x90
Comments