Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions 김민서/260312_숫자 야구.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import java.util.*;
import java.io.*;

public class Main {
static List<int[]> 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;
}
}
}
}
69 changes: 69 additions & 0 deletions 김민서/260312_양궁대회.java
Original file line number Diff line number Diff line change
@@ -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);
}
}