반응형
문제 출처 : https://www.acmicpc.net/problem/19949
문제
컴퓨터공학과 학생인 영재는 이번 학기에 알고리즘 수업을 수강한다.
평소에 자신의 실력을 맹신한 영재는 시험 전날까지 공부를 하지 않았다.
당연하게도 문제를 하나도 풀지 못하였지만 다행히도 문제가 5지 선다의 객관식 10문제였다.
찍기에도 자신 있던 영재는 3개의 연속된 문제의 답은 같지 않게 한다는 자신의 비법을 이용하여 모든 문제를 찍었다.
이때 영재의 점수가 5점 이상일 경우의 수를 구하여라.
문제의 점수는 1문제당 1점씩이다.
입력
시험의 정답이 첫 줄에 주어진다.
출력
영재의 점수가 5점 이상일 경우의 수를 출력하여라.
알고리즘 분류
풀이
간단한 완탐 문제.
10개의 문제를 하나씩 1~5번으로 찍는다.
본인은 재귀함수를 이용해 풀었고, 매개변수로 before, bbefore를 둔 다음 현재 찍을 정답과 비교한다.
before == bbefore == current라면 3개의 찍은 답이 연속하므로 다른 답을 찾는다. (가지치기)
딱히.. 설명할 게 없다. 말로 하는 것보다 코드로 보는 게 빠를 것 같다.
코드
val br = System.`in`.bufferedReader()
fun getIntList() = br.readLine().trim().split(' ').map { it.toInt() }
lateinit var answers: List<Int>
var answer = 0
fun main() = with(System.out.bufferedWriter()){
answers = getIntList()
bruteForce(0,0,0,0)
write("$answer")
close()
}
fun bruteForce(cnt: Int, idx: Int, before: Int, bbefore: Int) {
if(idx == 10) {
if(cnt >=5){
answer++
}
return
}
for(i in 1 .. 5){
val nextCnt = if(answers[idx] == i) cnt+1 else cnt
if(before == bbefore && before == i) continue
bruteForce(nextCnt, idx+1, i, before)
}
}
반응형
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 19699 소-난다! Kotlin (조합) (0) | 2023.01.13 |
---|---|
백준 20159 동작 그만. 밑장 빼기냐? (0) | 2022.12.21 |
백준 15728 에리 - 카드 Kotlin (완전탐색) (0) | 2022.12.16 |
프로그래머스 연속 부분 수열 합의 개수 Kotlin (Hash) (0) | 2022.12.12 |
백준 9205 맥주 마시면서 걸어가기 Kotlin (bfs) (0) | 2022.12.07 |
댓글