https://www.acmicpc.net/problem/2563
풀이
더보기
(아마 제 풀이가 완벽하지 않을 수 있읍니다)
어차피 색종이 크기는 정해져있기 때문에 미리 2차원 배열로 100 * 100의 배열로 준비해둡니다. 그리고 값을 1로 초기화 해둡니다.
종이 갯수를 첫 줄로 받아왔으면 1~종이갯수까지 반복합니다.
첫번째 종이의 가로와 세로의 좌표를 받아옵니다. 3 7이라고 예를 들면, 종이가 가로 10칸 세로 10칸이라고 했으므로
3 4 5 6 7 8 9 10 11 12, 10칸을 먹으므로 가로 반복문의 range 는 (3 until (3 + 10))이 됩니다.
가로 반복문 내에서 세로 반복문을 한번 더 처리해야합니다 (3, 7) (3, 4) ... (3, 16) 후, 다시 옆줄로 넘어가서 (4, 7), (4, 8) ... (4, 16) 이렇게 되기 때문입니다. 세로 반복문의 range도 동일하게 (7 until (7 + 10))이 됩니다.
그리고 가로 반복문의 index와 세로 반복문의 index와 일치하는 전체 종이의 index를 0으로 변경해줍니다. 0 으로 변경된 영역이 종이로 덮인 영역이라 생각합니다. 이렇게 되면 다음 종이가 들어와도 어차피 0이기 때문에 0으로 그대로 유지되게 됩니다. 즉, 겹쳐도 상관 없는거죠.
paper[가로 인덱스][세로 인덱스] = 0
종이 전체를 돌면서 변경했다면, 나와서 종이 배열을 반복문으로 돌면서 count { it -> it == 0 } 을 통해 0의 수만 세어주면 됩니다.
fun main(args: Array<String>) {
question2563()
}
fun question2563() {
var paperCount = readLine()!!.toInt()
var paper : Array<Array<Int>> = Array(100) { Array(100) { 1 } }
var count = 0
for(i in 1 .. paperCount) {
var item = readLine()!!.split(" ").map { it.toInt() }
for ( j in item[0] until item[0] + 10) {
for( k in item[1] until item[1] + 10) {
paper[j][k] = 0
}
}
}
paper.forEach {
count += it.count { item -> item == 0 }
}
println(count)
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 11005번 문제풀이 (0) | 2023.06.15 |
---|---|
Kotlin] 백준 2745번 문제풀이 (0) | 2023.06.14 |
Kotlin] 백준 10798번 문제풀이 (0) | 2023.06.13 |
Kotlin] 백준 2738번 문제풀이 (0) | 2023.06.13 |
Kotlin] 백준 1316번 문제풀이 (0) | 2023.06.13 |