문제
2578번: 빙고
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로
www.acmicpc.net
풀이
사회자가 부른 숫자를 하나씩 입력 받을 때마다 빙고 확인을 수행한다. 빙고 확인은 가로, 세로, 대각선을 모두 고려해야 하고, for문을 이용해 세어주면 된다.
코드
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val map = Array(5) { br.readLine().split(' ').map { it.toInt() } }
val visited = Array(5) { BooleanArray(5) } // 빙고 체크
fun bingo(): Boolean {
var cnt = 0
var cross1 = 0
var cross2 = 0
for(i in 0 until 5) {
var row = 0
var col = 0
for(j in 0 until 5) {
if(visited[i][j]) row++
if(visited[j][i]) col++
if(i==j && visited[i][j]) cross1++
if(i+j==4 && visited[i][j]) cross2++
}
if(row == 5) cnt++
if(col == 5) cnt++
}
if(cross1 == 5) cnt++
if(cross2 == 5) cnt++
return cnt>=3
}
var ans = 1
for(i in 0 until 5) {
val st = StringTokenizer(br.readLine())
for(j in 0 until 5) {
val num = st.nextToken().toInt()
for(k in 0 until 5) {
for(l in 0 until 5) {
if(map[k][l] == num) {
visited[k][l] = true
}
}
}
if(!bingo()) ans++
}
}
bw.write("$ans")
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 1138번: 한 줄로 서기 - Kotlin[코틀린] (0) | 2024.01.01 |
---|---|
[백준] 10826번: 피보나치 수 4 - Kotlin[코틀린] (1) | 2023.12.28 |
[백준] 1743번: 음식물 피하기 - Kotlin[코틀린] (0) | 2023.12.21 |
[백준] 1965번: 상자넣기 - Kotlin[코틀린] (0) | 2023.12.20 |
[백준] 10451번: 순열 사이클 - Kotlin[코틀린] (0) | 2023.12.19 |