Kotlin/Kotlin 알고리즘

백준 3059번 등장하지 않는 문자의 합 Kotlin 구현해보기

kimc 2023. 3. 13. 21:22

```

백준 3059번 등장하지 않는 문자의 합 Kotlin 구현해 보기

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 3059번 등장하지 않는 문자의 합 풀이

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

 

3059번: 등장하지 않는 문자의 합

입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어진다. S는 알파벳

www.acmicpc.net

 

 

백준 3059번 등장하지 않는 문자의 합은

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

 

알파벳 대문자로 이루어진 문자열 S가 주어지고

A = 65

B = 66

오름차순으로 1씩 증가해서

Z = 90일 때

S에 등장하지 않는 문자열들의 아스키 합을 구해주면 되는 문제입니다.

 


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

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


입력을 받고

정해진 조건에 맞는 아스키를 찾아주고

해당되는 아스키의 합을 구해서 출력했습니다.

 

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

fun getInput(): InputDto {
    val wordCount = readln().toInt()
    val words = emptyList<String>().toMutableList()
    for (i in 1..wordCount) {
        words.add(readln())
    }
    return InputDto(words)
}

data class InputDto(
    val words: List<String>
)

fun solution(dto: InputDto): String {
    return dto.words.map { k -> findAsciiSum(k) }.joinToString("\n")
}

fun findAsciiSum(word: String): Int {
    val arr = findMatchingAsciiArray(word)
    return findSumFromMatchingAsciiArray(arr)
}

private fun findSumFromMatchingAsciiArray(arr: BooleanArray): Int {
    var sum = 0
    for (i in arr.indices) {
        if (!arr[i]) {
            sum += i + 65
        }
    }
    return sum
}

private fun findMatchingAsciiArray(word: String): BooleanArray {
    val arr = BooleanArray(26)
    word.forEach { letter ->
        run {
            if (letter in 'A'..'Z') {
                val curIdx = letter - 'A'
                arr[curIdx] = true
            }
        }
    }
    return arr
}


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

 

테스트

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class MainKtTest {

    @Test
    fun test() {
        assertEquals(
            "267\n1950",
            solution(InputDto(listOf("ABCDEFGHIJKLMNOPQRSTUVW", "A")))
        )
    }
}

 

 

읽어주셔서 감사합니다

 

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

 

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

 


 

728x90