백준 2309 일곱난쟁이 완전탐색(코틀린)
2023. 10. 17. 14:34ㆍ- 알고리즘/백준
문제
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
풀이
브루트포스 완전탐색을 묻는 문제입니다.
키의 총합에서 임의의 2명을 뺏을때 총합이 100일때를 출력 하면됩니다.
재귀함수를 사용하여 풀어 보았습니다.
var result = mutableListOf<Int>()
fun main(args: Array<String>) {
var br = BufferedReader(InputStreamReader(System.`in`))
var bw = BufferedWriter(OutputStreamWriter(System.out))
var hum = mutableListOf<Int>()
repeat(9) {
hum.add(br.readLine().toInt())
}
check2309(0,0, hum)
result.sort()
result.forEach {
if (it != 0) bw.write("$it\n")
}
bw.flush()
bw.close()
}
fun check2309(cnt: Int, idx: Int, hum: MutableList<Int>) {
if (cnt == 2) {
if (hum.sum() == 100) {
if (result.isEmpty()) result.addAll(hum) // result = hum을 하면 참조값이 들어가기 때문에 이후에 hum가 변경되면 변경된값이 result에 갱신된다.
}
return
}
for (i in idx until 9) {
var a = hum.removeAt(i) // i번째 난쟁이 빼기
hum.add(i, 0) // 뺀 난쟁이키를 0으로 변경
check2309(cnt + 1, i + 1, hum)
hum.removeAt(i)
hum.add(i, a) // 난쟁이 다시 추가하여 초기화, 다음 난쟁이 검사
}
}
'- 알고리즘 > 백준' 카테고리의 다른 글
백준 1476 날짜계산 코틀린 (0) | 2023.11.13 |
---|---|
백준 1940 주몽, 코틀린, 투포인터 (0) | 2023.11.10 |
백준 12891 dna비밀번호, 슬라이딩 윈도우, 코틀린 (0) | 2023.11.09 |
에라토스테네스의 체, 소수 찾는 방법 (1) | 2023.11.06 |
백준 14501 퇴사 완전탐색(코틀린) (0) | 2023.10.17 |