본문 바로가기
스터디(beakjoon)

Kotlin] 백준 10798번 문제풀이

by 김마리님 2023. 6. 13.

https://www.acmicpc.net/problem/10798

 

10798번: 세로읽기

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’

www.acmicpc.net

 

 

풀이

더보기

일단 2차원 배열을 만들 배열 내 배열을 전역변수로 지정한다 .

그리고 maxCount를 지정하는데, 이는 배열에 들어오는 글자의 길이가 전부 동일하지 않기 때문에 지정해두는 것이다.

 

들어오는 문자가 다섯 개라고 했으므로 

0부터 4까지 반복문을 돌린다. 한 글자씩 떼어서 더해야하므로 string.toCharArray()를 이용하여 한 글자씩 뗀 배열을 저장한다.

이 때, 배열의 길이와 저장된 maxCount 두 개의 값을 비교해 더 큰 숫자를 maxCount 함으로써 반복문이 끝날때 쯤 제일 긴 문자열의 count값이 저장되도록 한다.

 

이제 while문을 통해 maxCount전까지 반복하도록 한다(근데 for문으로 해도 됐을듯?)

while문 내부에 다시 반복문을 만들어 배열 내에 있는 모든 배열 속, 지정된 인덱스 값만 추출하여 최종 문자열 배열에 더하도록 한다.

전체 다 더해졌으면 인덱스 값을 +1하여 다시 반복하여 +1 인덱스값을 모두 추출하여 더하도록 한다.

이때 배열의 길이가 인덱스를 반드시 넘어야만 하는데, 배열의 길이보다 인덱스가 넘어버리면 OutOfBoundException이 걸리기 때문에 배열 길이에 대한 조건문도 삽입해야한다.

 

이를 코드로 보면

fun main(args: Array<String>) {
    question10798()
}

fun question10798() {
    var wordList = mutableListOf<MutableList<Char>>()
    var verticalWord = ""
    var maxCount = 0

    for(i in 0 .. 4) {
        var list = readLine()!!.toCharArray().toMutableList()
        wordList.add(i, list)
        maxCount = maxCount.coerceAtLeast(list.count())
    }

    var index = 0
    while (index < maxCount) {
        wordList.forEach {
            if(it.count() > index) {
                verticalWord += it[index]
            }
        }
        index += 1
    }

    println(verticalWord)

}

 

반응형