관리 메뉴

나만을 위한 블로그

[Algorithm] 백준 - 알파벳 찾기 (10809) (Kotlin) 본문

알고리즘 문제 풀이/백준

[Algorithm] 백준 - 알파벳 찾기 (10809) (Kotlin)

참깨빵위에참깨빵_ 2024. 6. 7. 19:23
728x90
반응형

 

주어진 문자열에서 각 알파벳들의 등장 위치를 구하는 문제인데 아스키 값을 사용하면 쉽게 풀 수 있다.

알파벳 문자들은 컴퓨터 내부에서 숫자로 표현된다. 이 숫자가 아스키 값(ascii value)이라 불리는데, 위치를 구하고자 하는 알파벳에서 'a'를 빼면 그 알파벳의 위치를 알 수 있다. 이를 정수 배열에 적용하면 이 문제와 같이 알파벳 위치 별 등장 여부를 확인하거나, 등장 횟수를 카운트할 때 활용할 수 있다.

 

fun main() {
    val word = readln()
    val positions = IntArray(26) { -1 }

    for (i in word.indices) {
        val char = word[i]
        val alphabetIndex = char - 'a'

        if (positions[alphabetIndex] == -1) {
            positions[alphabetIndex] = i
        }
    }

    println(positions.joinToString(" "))
}

 

a~z까지 개수는 26이니 크기가 26인 정수 배열을 만들고 -1로 초기화한다. 이렇게 해야 등장하지 않은 알파벳의 인덱스에 -1이 들어간다.

그리고 입력받은 문자열의 인덱스를 순회하면서(indices) 각 인덱스 별 알파벳을 가져온다. 이 때 앞서 말한 것처럼 'a'를 빼면 그 알파벳의 위치를 알 수 있다.

 

이제 아스키 값을 활용해 본다. a의 아스키 값은 97이다. b는 98, c는 99 식으로 1씩 증가하는데 만약 b의 위치를 구하고자 한다면 b-a, 즉 98-97이 된다.

이 식의 값은 1이기 때문에 1번 인덱스가 곧 b의 위치가 된다. 만약 알파벳이 등장하지 않으면 처음 배열을 초기화할 때 -1을 사용했으니 그대로 -1이 된다.

 

아스키 문자와 숫자들은 아래 링크에서 테이블 형태로 확인할 수 있다.

 

https://www.asciitable.com/

 

ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal

ASCII Table ASCII stands for American Standard Code for Information Interchange. Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long

www.asciitable.com

 

 

반응형
Comments