반응형
```
백준 3059번 등장하지 않는 문자의 합 Kotlin 구현해 보기
```
이번 글을 통해 배워갈 내용
- 백준 3059번 등장하지 않는 문자의 합 풀이
https://www.acmicpc.net/problem/3059
백준 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
반응형
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
백준 3449번 해밍 거리 Kotlin 구현해보기 (0) | 2023.03.14 |
---|---|
백준 3060번 욕심쟁이 돼지 Kotlin 구현해보기 (0) | 2023.03.13 |
백준 20920번 영단어 암기는 괴로워 Kotlin 구현해보기 (0) | 2023.03.12 |
백준 7795번 먹을 것인가 먹힐 것인가 Kotlin 구현해보기 (0) | 2023.03.11 |
백준 20291번 파일정리 Kotlin 구현해보기 (0) | 2023.03.11 |