![[Lv. 0] 주사위 게임 3](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRl4vq%2FbtseGDXyi7O%2F0iCKtqqnkYYrfjKk3yAjn0%2Fimg.png)
![스몰스테핑](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
[Lv. 0] 주사위 게임 3프로그래머스/Level 02023. 5. 10. 14:23
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181916
난이도 : Level.0
언어 : Kotlin
문제 설명 :
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 이하의 정수입니다.
입출력 예 :
a | b | c | d | result |
2 | 2 | 2 | 2 | 2222 |
4 | 1 | 4 | 4 | 1681 |
6 | 3 | 3 | 6 | 27 |
2 | 5 | 2 | 6 | 30 |
6 | 4 | 2 | 5 | 2 |
풀이 :
import kotlin.math.abs
import kotlin.math.pow
class Solution {
fun solution(a: Int, b: Int, c: Int, d: Int): Int {
var temp = intArrayOf(a, b, c, d)
return when {
temp.groupBy { it }.size == 1 -> 1111 * temp[0]
temp.groupBy { it }.filter { it.value.size >= 3 }.values.flatten().count() == 3 -> {
val p = temp.groupBy { it }.filter { it.value.size == 3 }.values.flatten().maxOf { it }
val q = temp.groupBy { it }.filter { it.value.size == 1 }.values.flatten().maxOf { it }
((10 * p + q).toDouble().pow(2.0)).toInt()
}
temp.groupBy { it }.size == 2 -> {
val p = temp.minOf { it }
val q = temp.maxOf { it }
(p + q) * abs(p - q)
}
temp.groupBy { it }.size == 3 -> {
val q = temp.groupBy { it }.filter { it.value.size == 1 }.values.flatten().maxOf { it }
val r = temp.groupBy { it }.filter { it.value.size == 1 }.values.flatten().minOf { it }
q * r
}
temp.groupBy { it }.size == 4 -> temp.minOf { it }
else -> -1
}
}
}
조건이 많지만 차근히 하나씩 하면 어려울 것 없다
코드가 난잡해지기 쉬운게 아쉽긴하다
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] 배열 만들기 4 (0) | 2023.05.10 |
---|---|
[Lv. 0] 간단한 논리 연산 (0) | 2023.05.10 |
[Lv. 0] 글자 이어 붙여 문자열 만들기 (0) | 2023.05.10 |
[Lv. 0] 9로 나눈 나머지 (0) | 2023.05.10 |
[Lv. 0] 문자열 여러 번 뒤집기 (0) | 2023.05.10 |
![스몰스테핑](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!