배열은 리스트 두개로 만들어 관리합니다. 조금만 생각하면 금방 풀수 있습니다.
import java.io.BufferedReader
import java.io.InputStreamReader
// https://www.acmicpc.net/problem/2738
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val (n, m) = br.readLine().split(" ").map { it.toInt() }
val result: ArrayList<IntArray> = arrayListOf()
for (i in 0 until n) {
val row = br.readLine().split(" ").map { it.toInt() }.toIntArray()
result.add(row)
}
for (i in 0 until n) {
val row = br.readLine().split(" ").map { it.toInt() }
for (j in 0 until m) {
result[i][j] += row[j]
}
}
result.map {
println(it.joinToString(" "))
}
}
처음 max인 수를 나올수 있는 최솟값인 0 보다 작게 설정할것!
import java.io.BufferedReader
import java.io.InputStreamReader
// https://www.acmicpc.net/problem/2566
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
var n = 0
var m = 0
var max = -1
for (i in 0 until 9) {
val row = br.readLine().split(" ").map { it.toInt() }
for (j in 0 until 9) {
if (row[j] > max) {
max = row[j]
n = i + 1
m = j + 1
}
}
}
println(max)
println("$n $m")
}
가장긴 라인을 찾아두면 쓸데없이 15번째까지 돌 필요가 없다
// https://www.acmicpc.net/problem/10798
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val res : ArrayList<String> = arrayListOf()
var max = 1
for (i in 1 .. 5) {
val line = br.readLine().toString()
if (line.length > max) {
max = line.length
}
res.add(line)
}
for (idx in 0 until max) {
for (nIdx in 0 .. 4) {
val word = res[nIdx]
if (word.length >= idx +1) {
print(res[nIdx][idx])
}
}
}
}
import java.io.BufferedReader
import java.io.InputStreamReader
import java.lang.Integer.min
// https://www.acmicpc.net/problem/2563
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val paper: ArrayList<IntArray> = arrayListOf()
for (i in 1..100) {
paper.add(IntArray(100) { 0 })
}
val n = br.readLine().toInt()
for (i in 1..n) {
val (x, y) = br.readLine().split(" ").map { it.toInt() }
for (dx in x until min(x + 10, 100)) {
for (dy in y until min(y + 10, 100)) {
paper[dx][dy] = 1
}
}
}
println(paper.sumOf { it.sum() })
}
상당히 재미있는 문제입니다. 어떻게 푸는건지 처음에 막막하실텐데
우선 종이크기가 100*100 이므로 100*100 크기에 0을 모두 할당해줍니다.
이제 paper[i][j] 가 뜻하는 바는 (i,j) ~ (i+1,j+1)의 네모가 색칠 되있는지 안되어있는지 확인 한다 보시면 됩니다
그렇다면 (3,7) 부터 (13,17)까지 배열을 1로 채우면 해당 색종이 만큼 면적을 구했다 보면 되겠지요?
그리고 중요한것은 색종이가 도화지를 넘어서 덮을수도 있으므로 100을 넘지않게 조정해줘야합니다!
그리고 나서 paper의 모든 값을 더하면 면적이 되는것이죠