Kotlin/Kotlin 알고리즘

백준 20154번 이 구역의 승자는 누구야?! Kotlin 구현해보기

kimc 2022. 10. 8. 15:00

```

백준 20154번 이 구역의 승자는 누구야?! Kotlin 구현해보기

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 20154번 풀이

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

 

20154번: 이 구역의 승자는 누구야?!

첫째 줄에 알파벳 대문자로만 이루어진 길이 K(1 ≤ K ≤ 1,000,000)인 문자열 S가 주어진다.

www.acmicpc.net

 

백준 20154번 이 구역의 승자는 누구야?!는

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

 

알파벳 대문자의 획수가 주어지면

주어진 문자열에 전체 합이

홀수면 I'm a winner!

짝수면 You're the winner?

를 출력해주면 됩니다.

또한 모든 중간 연산에 합은 10으로 모듈러 연산을 해줘야 합니다.

 


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

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


문자열을 스트림 돌려서

각 문자의 획을 찾은 다음

모든 문자열을 더해주는데

중간에 10이 넘는 경우 모듈러 10 연산을 해주었습니다.

결과를 출력합니다.

 

val alphabetStrokeCnt = arrayOf(3, 2, 1, 2, 3, 3, 3, 3, 1, 1, 3, 1, 3, 3, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1)
const val I_WINNER_STRING = "I'm a winner!"
const val YOU_WINNER_STRING = "You're the winner?"

fun main(args: Array<String>) {
    print(findWinner(readln()))
}

fun findWinner(str: String): String {
    val ans = str.asSequence()
        .map { x -> strokeOfAlphabetCapital(x) }
        .fold(0) { sum, num -> sumWithMod10(sum, num) }

    return if (ans % 2 == 0) {
        YOU_WINNER_STRING
    } else {
        I_WINNER_STRING
    }
}

fun strokeOfAlphabetCapital(x: Char): Int {
    return alphabetStrokeCnt[x - 'A']
}

fun sumWithMod10(sum: Int, num: Int): Int {
    var ret = sum + num
    if (ret > 9) ret %= 10
    return ret
}

// https://codemasterkimc.tistory.com/

 

 

읽어주셔서 감사합니다

 

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

 

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

 


 

728x90