반응형
[프로그래머스] Java 코딩테스트 연습 - 주사위 연습 3
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/181916
문제
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 함수를 작성해 주세요.
풀이
if 문으로 문제에 맞게 조건문 코드를 작성했다.
중간에 절대값 계산이 필요한 부분에는 Math.abs()메서드를 사용했고,
최소값을 찾아야 하는 부분에서는 Math.min()메서드를 사용했다. Math.min()메서드는 두 수의 대소를 구분할 수 있기 때문에 Math.min(Math.min(a ,b), Math.min(c, d)) 형식으로 호출하여 4개의 수 중 가장 작은 수를 찾을 수 있게 했다.
소스코드
class Solution {
public int solution(int a, int b, int c, int d) {
if (a == b && b == c && c == d) { // abcd 모두 같다면
return 1111 * a;
} else if (a == b && b == c) { // abc만 같다면
return ((10 * a + d) * (10 * a + d));
} else if (a == c && c == d) { // acd만 같다면
return ((10 * a + b) * (10 * a + b));
} else if (a == b && b == d) { // abd만 같다면
return ((10 * a + c) * (10 * a + c));
} else if (b == c && c == d) { // bcd만 같다면
return ((10 * b + a) * (10 * b + a));
} else if (a == b && c == d) { // ab가 같고 cd가 같다면
return ((a + c) * (Math.abs(a - c)));
} else if (a == c && b == d) { // ac가 같고 bd가 같다면
return ((a + b) * (Math.abs(a - b)));
} else if (a == d && b == c) { // ad가 같고 bc가 같다면
return ((a + b) * (Math.abs(a - b)));
} else if (a == b && c != d) { // ab가 같고 cd가 다르다면
return (c * d);
} else if (a == c && b != d) { // ac가 같고 bd가 다르다면
return (b * d);
} else if (a == d && b != c) { // ad가 같고 bc가 다르다면
return (b * c);
} else if (b == c && a != d) { // bc가 같고 ad가 다르다면
return (a * d);
} else if (b == d && a != c) { // bd가 같고 ac가 다르다면
return (a * c);
} else if (c == d && a != b) { // cd가 같고 ab가 다르다면
return (a * b);
} else {
return Math.min(Math.min(a, b), Math.min(c, d));
}
}
}
반응형
'코딩테스트연습 > [프로그래머스] Java' 카테고리의 다른 글
[프로그래머스] Java 코딩테스트 연습 - 가까운 수 (0) | 2023.08.08 |
---|---|
[프로그래머스] Java 코딩테스트 연습 - 이차원 배열 대각선 순회하기 (0) | 2023.08.07 |
[프로그래머스] Java 코딩테스트 연습 - 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.08.05 |
[프로그래머스] Java 코딩테스트 연습 - 진료 순서 정하기 (0) | 2023.07.27 |
[프로그래머스] Java 코딩테스트 연습 - 중복된 숫자 개수 (0) | 2023.07.26 |