문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
제한사항
a, b, c, d는 1 이상 6 이하의 정수입니다.
풀이
Lv 0 단계라고 무시했다가 생각보다 고생을 좀 했다;;
1~6 사이 랜덤으로 주어지는 4개의 숫자에 대하여 캐이스 별로 계산하여 값을 뽑아내는 문제로
저는 map 을 이용하여 key 에는 주사위 값, value 에는 중복된 숫자를 카운트를 한 뒤
map.keySet().size() 를 통해 map 의 size() 에 따라 작업을 분리하여 처리하였습니다!
정답
import java.util.*;
class Solution {
public int solution(int a, int b, int c, int d) {
int answer = 1;
Map<Integer, Integer> map = new HashMap<>();
mapAdd(map, a);
mapAdd(map, b);
mapAdd(map, c);
mapAdd(map, d);
if(map.keySet().size() == 1){ // 4
answer = a * 1111;
}else if(map.keySet().size() == 4){ // 1 : 1 : 1 : 1
int min = Integer.MAX_VALUE;
for(int n : map.keySet()){
min = Math.min(n, min);
}
answer = min;
}else if(map.keySet().size() == 3){ // 2 : 1 : 1
for(int i : map.keySet()){
if(map.get(i) == 1)
answer *= i;
}
}else if(map.keySet().size() == 2){ // 2 : 2 or 3 : 1
int p = 0;
int q = 0;
boolean check = true;
for(int i : map.keySet()){
if(map.get(i) == 2){
if(p == 0) p = i;
else q = i;
}else if(map.get(i) == 3){
check = false;
p = i;
}else{
q = i;
}
}
if(check){
answer = (p + q) * (Math.max(p, q) - Math.min(p, q));
}else{
answer = (10 * p + q) * (10 * p + q);
}
}
return answer;
}
public void mapAdd(Map<Integer, Integer> map, int v){
if(map.containsKey(v)){
map.put(v, map.get(v)+1);
}else{
map.put(v, 1);
}
}
}
출처
프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/181916#qna
'코딩 테스트' 카테고리의 다른 글
[프로그래머스]KAKAO BLIND RECRUITMENT 실패율 Lv1 (0) | 2024.03.03 |
---|---|
프로그래머스) [1차] 비밀지도 Lv1 (0) | 2024.03.01 |
프로그래머스) 바탕화면 정리 Lv1 (0) | 2024.02.16 |
프로그래머스) 문자열 나누기 Lv1 (0) | 2024.02.16 |
프로그래머스) 숫자 짝꿍 Lv1 (2) | 2024.02.15 |