Search

37. 주사위 게임3

내 답안
import java.util.HashMap; import java.util.ArrayList; import java.util.List; import java.util.Collections; class Solution { public int solution(int a, int b, int c, int d) { HashMap<Integer, Integer> dice = new HashMap<>(); // Map 생성 dice.put(a, dice.getOrDefault(a, 0)+1); // dice HashMap K로 a 저장, V로 1 저장 dice.put(b, dice.getOrDefault(b, 0)+1); // 이때, a와 b가 동일할 수도 있기 때문에 b를 K로 호출해서 HashMap에 이미 존재하는지 확인, 존재한다면 +1 추가 dice.put(c, dice.getOrDefault(c, 0)+1); // 위 주석과 동일한 메커니즘으로 동작하여 최종적으로는 Key(a~d):Value(Count)의 형태로 자료구조가 완성이 됨. dice.put(d, dice.getOrDefault(d, 0)+1); List<Integer> keys = new ArrayList<>(dice.keySet()); // Map의 key들을 따로 추출하여 List화 switch(dice.size()){ case 1: // 모두 같은 수 return 1111 * a; case 2: // 두가지수 if(dice.get(keys.get(0)) == 1 || dice.get(keys.get(1)) == 1){ // 1 : 3 int p = dice.get(keys.get(0)) == 3 ? keys.get(0) : keys.get(1); int q = dice.get(keys.get(0)) == 1 ? keys.get(0) : keys.get(1); return (int) Math.pow((10*p)+q, 2); }else{ // 2 : 2 return (keys.get(0) + keys.get(1)) * Math.abs(keys.get(0) - keys.get(1)); } case 3: // 2개 같고, 1, 1 다름 int result = 0; for(Integer key : dice.keySet()){ if(dice.get(key) != 2){ if(result == 0){ result = key; }else{ return result * key; } } } case 4: // 제일 작은 수 Collections.sort(keys); return keys.get(0); } return 0; } }
Java
복사
하드코딩하다가 다른사람꺼 참고해서 진행함 ㅜㅜㅋㅋㅋㅋ
다른 사람 풀이법
정렬로 쉽게 진행하셔서 충격…
import java.util.Arrays; class Solution { public int solution(int a, int b, int c, int d) { int[] dice = { a, b, c, d }; Arrays.sort(dice); int ans = 0; if (dice[0] == dice[3]) { ans = 1111 * dice[3]; } else if (dice[0] == dice[2] || dice[1] == dice[3]) { ans = (int) Math.pow(dice[1] * 10 + (dice[0] + dice[3] - dice[1]), 2); } else if (dice[0] == dice[1] && dice[2] == dice[3]) { ans = (dice[0] + dice[3]) * (dice[3] - dice[0]); } else if (dice[0] == dice[1]) { ans = dice[2] * dice[3]; } else if (dice[1] == dice[2]) { ans = dice[0] * dice[3]; } else if (dice[2] == dice[3]) { ans = dice[0] * dice[1]; } else { ans = dice[0]; } return ans; } }
Java
복사
import java.util.*; class Solution { public int solution(int a, int b, int c, int d) { int[] dice = {a, b, c, d}; Arrays.sort(dice); // 배열로 정렬하면, if (dice[0] == dice[3]) { // 처음과 끝이 같으면 모두 같은 숫자 return 1111 * dice[0]; } else if (dice[0] == dice[2]) { // 세 숫자가 같은 경우 1 return (int) Math.pow((10 * dice[0] + dice[3]),2); } else if (dice[1] == dice[3]) { // 세 숫자가 같은 경우 2 return (int) Math.pow((10 * dice[1] + dice[0]),2); } else if (dice[0] == dice[1] && dice[2] == dice[3]) { // 2개씩 같은 값 return (dice[0] + dice[2]) * Math.abs(dice[0] - dice[2]); } else if (dice[0] == dice[1] || dice[1] == dice[2] || dice[2] == dice[3]) { // 2개는 동일하고, 나머지 주사위가 다른 경우 if (dice[0] == dice[1]) { return dice[2] * dice[3]; } else if (dice[1] == dice[2]) { return dice[0] * dice[3]; } else { return dice[0] * dice[1]; } } else { return dice[0]; } } }
Java
복사