Kotlin/Kotlin 알고리즘

백준 30032번 알파벳 뒤집기 Kotlin 구현해보기

kimc 2023. 9. 20. 20:30
반응형

```

백준 30032번 알파벳 뒤집기 Kotlin 구현해 보기

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 30032번 풀이

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

 

30032번: 알파벳 뒤집기

알파벳 소문자 d, b, q, p는 상하좌우로 뒤집으면 d, b, q, p 중 하나로 변하는 특별한 성질이 있다. 그 성질을 정리하면 다음과 같다. d를 상하로 뒤집으면 q로, 좌우로 뒤집으면 b로 변한다. b를 상하

www.acmicpc.net

 

백준 30032번 알파벳 뒤집기는

난이도 브론즈 등급의 문제로서

 

d를 상하로 뒤집으면 q로, 좌우로 뒤집으면 b로

b를 상하로 뒤집으면 p로, 좌우로 뒤집으면 d로

q를 상하로 뒤집으면 d로, 좌우로 뒤집으면 p로

p를 상하로 뒤집으면 b로, 좌우로 뒤집으면 q로

변하며

 

d, b, q, p로 이뤄진 2D 배열을 입력받고

명령어 1을 입력받으면 상하반전

명령어 2를 입력받으면 좌우반전

해주면 되는 문제입니다


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


입력을 받고

정해진 조건에 맞춰서 계산을 해서 출력해 주면 되는

문제입니다.

 

요즘에는 주석이나 설명 없이 코드로 설명하고자 노력 중입니다

만약 코드가 이해가 안 가시면 댓글 부탁드립니다

 

fun main() {
    val inputDto = getInput()
    print(solution(inputDto))
}

fun getInput(): InputDto {
    val (rows, directionCmd) = readln().split(" ").map { it.toInt() }
    val cols = rows
    val alphaMap = Array(rows) { Array(cols) { ' ' } }

    val inputLines = List(rows) { readln() }
    inputLines.forEachIndexed { rowIdx, line ->
        line.forEachIndexed { colIdx, char ->
            alphaMap[rowIdx][colIdx] = char
        }
    }
    return InputDto(alphaMap, directionCmd)
}

data class InputDto(
    val alphaMap: Array<Array<Char>>,
    val directionCmd: Int
) {

    fun applyDirectionCmd(){
        alphaMap.forEachIndexed { rowIdx, line ->
            line.forEachIndexed { colIdx, char ->
                when (directionCmd) {
                    1 -> {
                        alphaMap[rowIdx][colIdx] = verticalFlip(char)
                    }
                    2 -> {
                        alphaMap[rowIdx][colIdx] = horizontalFlip(char)
                    }
                    else -> {
                        throw Error("not valid cmd")
                    }
                }
            }
        }
    }

    private fun verticalFlip(char : Char): Char {
        return when(char){
            'd'->'q'
            'b'->'p'
            'q'->'d'
            'p'->'b'
            else-> throw Error("not valid char")
        }
    }
    private fun horizontalFlip(char : Char): Char {
        return when(char){
            'd'->'b'
            'b'->'d'
            'q'->'p'
            'p'->'q'
            else-> throw Error("not valid char")
        }
    }

    fun to2DString() : String{
        val sb = StringBuilder("")

        alphaMap.forEach { line ->
            line.forEach { char ->
                sb.append(char)
            }
            sb.append("\n")
        }
        if(sb.isNotEmpty()){
            sb.deleteCharAt(sb.length - 1)
        }
        return sb.toString()
    }
}

fun solution(dto: InputDto): String {
    dto.applyDirectionCmd()
    return(dto.to2DString())
}

// https://www.acmicpc.net/problem/30032
// https://codemasterkimc.tistory.com/

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

반응형