문제
내가 작성한 정답
import java.util.*;
class Solution {
public int solution(int a, int b, int c, int d) {
int[] arr = {a, b, c, d};
Arrays.sort(arr);
int aa = arr[0], bb = arr[1], cc = arr[2], dd = arr[3];
// aaaa
if (aa == dd) return aa * 1111;
// aaab
else if (aa == cc) return (int) Math.pow(aa * 10 + dd, 2);
// abbb
else if (bb == dd) return (int) Math.pow(dd * 10 + aa, 2);
// aabb
else if (aa == bb && cc == dd) return (aa + dd) * Math.abs(aa - dd);
// aabc
else if (aa == bb) return cc * dd;
// abbc
else if (bb == cc) return aa * dd;
// abcc
else if (cc == dd) return aa * bb;
// abcd
else return aa;
}
}
다른 사람들의 정답
import java.util.*;
class Solution {
public int solution(int a, int b, int c, int d) {
Map<Integer, Integer> map = new HashMap<>();
for (int data : new int[] {a, b, c, d}) {
if (map.containsKey(data)) map.put(data, map.get(data) + 1);
else map.put(data, 1);
}
PriorityQueue<Dice> pq = new PriorityQueue<>();
for (int key : map.keySet())
pq.add(new Dice(key, map.get(key)));
int answer = 0;
if (pq.size() == 1) answer = pq.poll().number * 1111;
else if (pq.size() == 3) {
pq.poll();
answer = pq.poll().number * pq.poll().number;
} else if (pq.size() == 4) {
pq.poll(); pq.poll(); pq.poll();
answer = pq.poll().number;
} else {
Dice maxDice = pq.poll();
Dice next = pq.poll();
if (maxDice.count == 3) {
answer = (10 * maxDice.number + next.number) * (10 * maxDice.number + next.number);
} else {
answer = (maxDice.number + next.number) * ((int)(Math.abs(maxDice.number - next.number)));
}
}
return answer;
}
public class Dice implements Comparable<Dice> {
int number;
int count;
public Dice(int number, int count) {
this.number = number;
this.count = count;
}
@Override
public int compareTo(Dice o) {
if (this.count == o.count)
return o.number - this.number;
return o.count - this.count;
}
}
}Share article