본문 바로가기

알고리즘

[ 알고리즘 / kotlin ] 백준 11047 동전0

 

  • 문제

백준 그리디 알고리즘 동전0 문제입니다.

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

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

 

  • 풀이
val sc: Scanner = Scanner(System.`in`)
var (coin, price) = readLine()!!.split(' ').map(String::toInt)

사용할 수 있는 동전 개수(coin)와 만들 금액(price)을 입력받고 split을 사용하여 각각 변수에 대입합니다.

 

var coinList = arrayOfNulls<Int>(coin)

    for (i in 0..coinList.lastIndex) {
        coinList[i] = sc.nextLine().toInt()
    } 

 

coin의 개수만큼 동전리스트 배열을 정적으로 생성하고 값을 넣어줍니다.

 

for (j in (coin - 1) downTo 0) {  // 가장 큰 돈 부터 확인하는 것이 가장 효율적이라고 생각
        if (price / (coinList[j]!!) != 0) { // 전체 금액을 나눴을 때의 몫이 0이면 전체 금액보다 큰 금액이므로 제외
            result += price / (coinList[j]!!) // 몫을 기준으로 동전개수 파악
            price %= coinList[j]!! // 차례대로 남은 전체 금액 파악
        }
    }
    println(result)

 

  • 전체 코드
fun main() {

    val sc: Scanner = Scanner(System.`in`)
    var (coin, price) = readLine()!!.split(' ').map(String::toInt)

    var result = 0 // 동전개수
    var coinList = arrayOfNulls<Int>(coin)

    for (i in 0..coinList.lastIndex) {
        coinList[i] = sc.nextLine().toInt()
    } // 배열에 동전 종류 넣기

    for (j in (coin - 1) downTo 0) {  // 가장 큰 돈 부터 확인하는 것이 가장 효율적이라고 생각
        if (price / (coinList[j]!!) != 0) { // 전체 금액을 나눴을 때의 몫이 0이면 전체 금액보다 큰 금액이므로 제외
            result += price / (coinList[j]!!) // 몫을 기준으로 동전개수 파악
            price %= coinList[j]!! // 차례대로 남은 전체 금액 파악
        }
    }
    println(result)
}

읽어주셔서 감사합니다.

좀 더 나은 방법이 있다면 댓글로 남겨주시면 감사하겠습니다.

반응형