[백준] 암호 (1718)(kotlin)

문제 설명

백준 1718번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 평문이, 둘째 줄에 암호화 키가 주어진다. 평문은 알파벳 소문자와 공백문자(space)로 만 구성되며, 암호화 키는 알파벳 소문자만으로 구성된다. 평문의 길이는 공백까지 포함해서 30000자 이하이다.

» 출력

첫 번째 줄에 암호문을 출력한다.

예제 입출력(테스트케이스)

입력 출력
nice day
love
btgz oet

문제 풀이1

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    val password = readLine()
    val key = readLine()
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val passwordLength = password.length
    val keyLength = key.length
    var passwordIdx = 0
    var keyIdx = 0

    while (passwordIdx < passwordLength) {
        bw.write(passwordConverter(password[passwordIdx], key[keyIdx]))
        passwordIdx++
        keyIdx++
        if (keyIdx > keyLength - 1) keyIdx = 0
    }

    bw.flush()
    bw.close()

}

fun passwordConverter(pch: Char, kch: Char): String {
    val pchInt = pch - 'a'
    val kchInt = kch - 'a'

    return when {
        pch == ' ' -> " "
        pchInt - kchInt > 0 -> {
            ('a' - 1 + pchInt - kchInt).toString()
        }
        pch - kch < 0 -> {
            val q = kchInt - pchInt
            ('z' - q).toString()
        }
        else -> "z"
    }
}