본문 바로가기
스터디(beakjoon)

Kotlin] 백준 2480번 문제 풀이

by 김마리님 2023. 4. 10.

https://www.acmicpc.net/problem/2480

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개

www.acmicpc.net

 

 

풀이

더보기

if문 여러개 쓰는거 진짜진짜 싫어서 max로 해결함.

코틀린 배열에는 count가 있어서 조건에 맞는 값을 필터링하여 값을 세주는데, 해당 함수를 이용해 해당 주사위와 일치하는 갯수들을 찾고, 거기서 최댓값이 3인지 2인지 기타인지 찾는다.

만약 3이라면 모두 다 맞는다는 얘기니 10000 + 주사위 첫째 배열 * 1000

만약 2라면 1, 3 주사위 / 2, 3 주사위 / 1, 2 주사위 세 가지 케이스가 생기므로, 맥스 2인 필터링 배열의 인덱스 값을 먼저 찾고, 그 인덱스로 주사위 눈을 구한다. 그리고 그 눈으로 1000 + 100* 눈

어느 케이스에도 속하지 않는 다면 주사위 눈 배열을 max하여 최댓값을 추출한 후, 100 * 최댓값 을 실행한다.

 

import java.util.Scanner
import kotlin.math.max

fun main(args: Array<String>) {
    question2480()
}

fun question2480() {
    var sc = Scanner(System.`in`)
    var diceList = sc.nextLine().split(" ").map { it.toInt() }
    var maxList = Array<Int>(3) {0}

    diceList.forEachIndexed { index, i ->
        maxList[index] = diceList.count { it == i }
    }

    if(maxList.max() == 3) {
        println(10000 + diceList[0] * 1000)
    } else if(maxList.max() == 2) {
        println(1000 + diceList[maxList.indexOf(2)] * 100)
    } else {
        println(diceList.max() * 100)
    }
}

 

반응형