7. 2차원 배열 단계

WonDDak·2023년 4월 6일
0

BAEKJOON

목록 보기
7/10

2738 행렬덧셈

배열은 리스트 두개로 만들어 관리합니다. 조금만 생각하면 금방 풀수 있습니다.

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(" "))
    }
    
}

2566 최댓값

처음 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")
}

10798 세로읽기

가장긴 라인을 찾아두면 쓸데없이 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])
            }
        }
    }
}

2563 색종이

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의 모든 값을 더하면 면적이 되는것이죠

profile
안녕하세요. 원딱입니다.

0개의 댓글