https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0
접근 방식
1. - 처음에 규영이가 고른 카드를 제외한 9장의 카드를
inyeong이라는 배열에 보관
2. 인영이의 카드 배열 모든 순열 구하기
3. 인영이의 카드 배열 구한 다음,
규영이의 카드와 비교하여 이기는지 지는지 판단할 것
시행 착오
- permu함수 내에서 selectedInyeong의 인덱스를
cnt로 해야하는데
i로 해서 오류가 발생함..
cnt는 뽑은 수의 개수,
즉, permu함수를 돌면서
selectedInyeong에 넣은 인영이의 카드 개수를 의미한다.
또한, selectedInyeong에 값을 넣어야하는 인덱스를 의미함.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution { static int[] gyeong; static boolean[] checkCard; static int[] inyeong; static int[] selectedInyeong; static boolean[] visited; static int n = 9; static int win_answer; static int lose_answer; public static void permu(int cnt) { if (cnt==n) { int gCnt=0; int iCnt=0; for(int i=0; i<n; i++) { if (gyeong[i]>selectedInyeong[i]) { gCnt+=(gyeong[i]+selectedInyeong[i]); }else { iCnt+=(gyeong[i]+selectedInyeong[i]); } } if (gCnt>iCnt) { win_answer+=1; }else { lose_answer+=1; } return; } for (int i = 0; i <9; i++) { if (visited[i]) { continue; } selectedInyeong[cnt]=inyeong[i]; // selectedInyeong의 idx를 i로 설정해서 오류 발생; visited[i]=true; // 중복으로 선택하는 것을 방지하기 위함 permu(cnt+1); visited[i]=false; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for (int t = 1; t <= T; t++) { gyeong=new int[n]; // 규영이 카드 inyeong=new int[n]; // 인영이 카드 checkCard=new boolean[n*2+1]; // 규영이가 고른 카드를 제외한 숫자를 뽑아내기 위한 배열 selectedInyeong = new int[n]; visited=new boolean[n]; win_answer=0; lose_answer=0; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) { gyeong[i]=Integer.parseInt(st.nextToken()); checkCard[gyeong[i]]=true; // 규영이가 고른 카드 체크 } int idx=0; /* 1. 카드를 섞어서 9장씩 카드를 나눠갖는다.*/ for (int i=1; i<=18; i++) { if(!checkCard[i]) { // 규영이가 선택한 카드가 아니라면 inyeong[idx]=i; // 인영이 카드에 넣어주기 idx++; } } permu(0); System.out.print("#"+t+" "+win_answer+" "+ lose_answer+"\n"); } } } | cs |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[2563] 색종이 in Java (0) | 2022.08.09 |
---|---|
[1861] 정사각형 방 in Java (0) | 2022.08.09 |
[9229] 한빈이와 Spot Mart in Java (0) | 2022.08.08 |
[1228] 암호문1 in Java (0) | 2022.08.08 |
[1158] 요세푸스 문제 in Java (0) | 2022.08.08 |