diff --git "a/\352\271\200\353\257\274\354\204\234/260312_\354\210\253\354\236\220 \354\225\274\352\265\254.java" "b/\352\271\200\353\257\274\354\204\234/260312_\354\210\253\354\236\220 \354\225\274\352\265\254.java" new file mode 100644 index 0000000..26dc5fa --- /dev/null +++ "b/\352\271\200\353\257\274\354\204\234/260312_\354\210\253\354\236\220 \354\225\274\352\265\254.java" @@ -0,0 +1,94 @@ +import java.util.*; +import java.io.*; + +public class Main { + static List list = new ArrayList<>(); + static boolean[] visited = new boolean[10]; + static int[] out = new int[3]; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int note[][] = new int[n][3]; + + dfs(0); + + int cnt = 0; + + for(int i = 0; i < n; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int num = Integer.parseInt(st.nextToken()); + int strike = Integer.parseInt(st.nextToken()); + int ball = Integer.parseInt(st.nextToken()); + + note[i] = new int[] {num, strike, ball}; + } + + int b = 0; + int s = 0; + + for(int[] c : list) { + boolean correct = true; + + for(int i = 0; i < n; i++) { + s = note[i][1]; + b = note[i][2]; + + if(!findSB(c, note[i][0], s, b)) { + correct = false; + break; + } + } + + if(correct) { + cnt++; + } + } + + System.out.println(cnt); + } + + public static boolean findSB(int[] a, int b, int strike, int ball) { + int[] num = new int[3]; + num[0] = b / 100; + num[1] = (b / 10) % 10; + num[2] = b % 10; + + int sa = 0; + int ba = 0; + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + if(num[i] == a[j]) { + if(i == j) { + sa++; + } else { + ba++; + } + } + } + } + + if(sa == strike && ba == ball) { + return true; + } + + return false; + } + + static void dfs(int d) { + if(d == 3) { + list.add(out.clone()); + return; + } + + for(int i = 1; i < 10; i++) { + if(!visited[i]) { + visited[i] = true; + out[d] = i; + dfs(d + 1); + visited[i] = false; + } + } + } +} \ No newline at end of file diff --git "a/\352\271\200\353\257\274\354\204\234/260312_\354\226\221\352\266\201\353\214\200\355\232\214.java" "b/\352\271\200\353\257\274\354\204\234/260312_\354\226\221\352\266\201\353\214\200\355\232\214.java" new file mode 100644 index 0000000..3d5ece8 --- /dev/null +++ "b/\352\271\200\353\257\274\354\204\234/260312_\354\226\221\352\266\201\353\214\200\355\232\214.java" @@ -0,0 +1,69 @@ +import java.util.*; + +class Solution { + static int[] lion = new int[11]; + static int[] answer = new int[11]; + static int max = 0; + + public int[] solution(int n, int[] info) { + dfs(0, n, info); + for(int i = 0; i < 11; i++) { + if(answer[i] != 0) { + return answer; + } + } + return new int[] {-1}; + } + //dfs 돌려서 점수차가 최댓값인 배열을 리스트에 저장 + //dfs 나와서 최댓값인 애들 뒤에서부터 비교 + public void dfs(int idx, int n, int[] info) { + if(idx == 11) { + lion[10] += n; + int ls = 0; + int ps = 0; + + for(int i = 10; i >= 0; i--) { + if(lion[i] == 0 && info[i] == 0) continue; + + if(lion[i] > info[i]) { + ls += 10 - i; + } else { + ps += 10 - i; + } + } + + int diff = ls - ps; + + if(diff <= 0) { + lion[10] -= n; + return; + } + + if(diff > max) { + max = diff; + answer = lion.clone(); + } else if(diff == max) { + for(int i = 10; i >= 0; i--) { + if(lion[i] > answer[i]) { + answer = lion.clone(); + break; + } else if(lion[i] < answer[i]) { + break; + } + } + } + + lion[10] -= n; + return; + } + + int need = info[idx] + 1; + if(need <= n) { + lion[idx] = need; + dfs(idx + 1, n - need, info); + } + + lion[idx] = 0; + dfs(idx + 1, n, info); + } +} \ No newline at end of file