public class Masterbrain
{
String score(String g, String p) {
int b = 0, w = 0;
boolean[] ug = new boolean[4];
boolean[] up = new boolean[4];
for (int i = 0; i < 4; i++) {
if (g.charAt(i)==p.charAt(i)) {
b++;
ug[i] = true;
up[i] = true;
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (!ug[i] && !up[j] && g.charAt(i)==p.charAt(j)) {
w++;
ug[i] = true;
up[j] = true;
}
}
}
return "" + b + "b " + w + "w";
}
boolean check(String[] g, String[] r, String p) {
int lies = 0;
for (int i = 0; i < g.length; i++) {
String res = score(g[i],p);
if (!r[i].equals(res)) {
if (lies == 1) return false;
else lies = 1;
}
}
return lies == 1;
}
public int possibleSecrets(String[] guesses, String[] results) {
int res = 0;
char[] p = new char[4];
for (p[0] = '1'; p[0] <= '7'; p[0]++)
for (p[1] = '1'; p[1] <= '7'; p[1]++)
for (p[2] = '1'; p[2] <= '7'; p[2]++)
for (p[3] = '1'; p[3] <= '7'; p[3]++)
if (check(guesses, results, new String(p)))
res++;
return res;
}
}
Problem
각 자리마다 1~7의 숫자를 가질 수 있는 4자리가 있다. 두 명의 사람 중 한 사람은 숫자 4자리가 정하고 나머지 한 사람은 이 숫자를 추측해야 한다. b는 해당 자리와 숫자가 정확히 일치하는 개수고, w는 숫자는 같지만 자리가 다른 개수이다. 한 가지 예외는 추측한 숫자에 대한 답 중 정확히 한 개는 거짓이여야 한다는 것이다.
Explanation
1111~7777 숫자를 만드는 4개의 for문으로 특정 숫자를 만든다. 이 숫자를 guesses배열에 있는 숫자들과 비교한다. 이 결과로 나온 String "xb xw"를 results배열과 비교하고 같은 결과값인 개수에 따라 계수(counting) 유무를 정한다. 2개 이상이면 제외하고, 1개는 계수(count)에 포함시키고 0개면 제외한다.
References
최근 덧글