- 문제
백준 그리디 알고리즘 동전0 문제입니다.
https://www.acmicpc.net/problem/11047
- 풀이
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)
}
읽어주셔서 감사합니다.
좀 더 나은 방법이 있다면 댓글로 남겨주시면 감사하겠습니다.
반응형
'알고리즘' 카테고리의 다른 글
[ 알고리즘 / kotlin ] 최대공약수 구하기 - 유클리드 호제법 (0) | 2020.04.29 |
---|---|
[ 알고리즘 / kotlin ] 프로그래머스 lv1 체육복 (0) | 2020.04.10 |
[ 알고리즘 / kotlin ] 프로그래머스 lv1 모의고사 (0) | 2020.04.07 |
[ 알고리즘 / kotlin ] 백준 2606 Virus (0) | 2020.04.02 |
[ 알고리즘 / kotlin ] 알고리즘 문제에 도움이 되는 코틀린 문법 1 (0) | 2020.02.28 |