https://www.acmicpc.net/problem/2738
풀이
더보기
2차원 행렬에 대한 문제이다.
2차원 행렬은 리스트 내에 리스트를 넣어 보통 만든다. 그렇게 되면
[[1, 2, 3], [4, 5, 6]]의 형태를 지닌다.
2개의 행렬이 주어진다고 했으므로, 2개의 행렬이 저장될 2개의 전역변수를 선언한다.
이 때 mutableList<mutableList<Int>>로 선언하여 행렬 내에 행렬이 들어가도록 한다.
첫 줄에는 행렬의 행과 열이 주어진다.
이 때, 2개의 행렬이 들어온다 했으므로 다음에 들어올 데이터의 수도 얼추 짐작할 수 있다, 행의 2배이다.
따라서, for문을 1부터 ~(처음 들어온 값의 앞 숫자 *2) 만큼 회전시킨다.
이제부터 반복문을 돌려, 받아온 값을 정수 리스트화 하여 앞서 만든 전역변수에 넣는다. (list<String>.map { it.toInt() } 를 통해 문자열 배열을 정수배열로 만들 수 있다) 이 때, 만일 인덱스가 행의 넘어서는 순간 두 번째 행렬이라는 소리이므로 이를 if로 구분지어 넣는다.
이제 같은 모양의 행렬이므로 만들어진 전역변수 배열 리스트를 반복문으로 한 줄 씩 회전하고, 또 내부에서 이중 반복문을 통해 각 줄의 요소를 더하는데, 두번째 행렬 리스트와 일치하는 인덱스를 찾아 더한다. 다 더해졌다면 배열을 문자열로 변경하여(joinToString)출력한다.
fun main(args: Array<String>) {
question2783()
}
fun question2783() {
var arrayType = readLine()!!.split(" ").map { it.toInt() }
var firstArray = mutableListOf<MutableList<Int>>()
var secondArray = mutableListOf<MutableList<Int>>()
for(i in 1 .. (arrayType[0] * 2)) {
var item = readLine()!!.split(" ").map { it.toInt() }.toMutableList()
if(i <= arrayType[0]) { firstArray.add(item) } else { secondArray.add(item) }
}
for(i in 0 until firstArray.size) {
for(j in 0 until firstArray[i].size) {
firstArray[i][j] += secondArray[i][j]
}
println(firstArray[i].joinToString(" "))
}
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 10798번 문제풀이 (0) | 2023.06.14 |
---|---|
Kotlin] 백준 10798번 문제풀이 (0) | 2023.06.13 |
Kotlin] 백준 1316번 문제풀이 (0) | 2023.06.13 |
Kotlin] 백준 25206번 문제풀이 (0) | 2023.06.12 |
Kotlin] 백준 1316번 문제풀이 (1) | 2023.06.09 |