[Kotlin]PS_7

Hood·2024년 8월 8일

매일PS

목록 보기
7/11
post-thumbnail

✍   Kotlin을 사용한 백준 알고리즘 문제풀이

매일 백준의 알고리즘 문제를 풀며 3문제씩 풀며
한 언어를 마스터 할 것을 목표로 이 글을 작성할 예정입니다.


🔎 10809번

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

이 문제는 문자열 하나를 받아 그것이 알파벳 배열 안에 몇 번째에 자리하고 있는지에 대한 문제이다.
그래서 a부터 z까지 체크할 수 있도록 -1로 구성된 26개의 배열을 만들어 주었고
for 문을 통해 str에 .indices 를 주어 x에 들어오는 값을 숫자로 바꾸어 주었다.
그 이유는 index의 str[x]를 줌으로 써 x에 들어오는 숫자 값에 대한 문자에 인덱스를 가져올 것이고
- 'a' 를 해주는 것은 a의 아스키 값을 빼면 몇 번째 자리의 배열에
그 알파벳이 오는 지 알 수 있기 때문이다.
또한 if문으로 그 자리에 -1이면 그 자리를 바꿔주어야 하기에 조건문을 걸어주었고
미리 바뀌었다면 그냥 넘어가도록 두었다. 이것은 중복하여 바뀌는 것을 막기 위해서다.
마지막으로 .forEach 즉 배열 반복문을 통해 result가 연달아 출력되도록 했다.

import java.util.Scanner

fun main() {
    val sc = Scanner(System.`in`)
    val str = sc.next()
    val result = IntArray(26) { -1 }

    for (x in str.indices){
        val index = str[x] - 'a'
        if (result[index] == -1){
            result[index] = x
        }
    }
    result.forEach { print("$it ") }
}

🔎 2675번

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

이 문제는 repeat을 사용하면 내가 원하는 반복만큼 돌기에 정말 편리했다.
처음에 내가 문자열을 몇 개 받을 것인지 받아주고
그 만큼 내가 문자열을 반복할 'n'과 문자열 'str'을 받아주고
strRe를 만들어 값을 여기에 넣어주었다.
반복문으로 str.indices를 주어 x에는 0부터 문자열 만큼 돌고
이중 반복문으로 repeat를 넣어주어 n만큼 그 문자열이 strRe에 들어가도록 만들어 주었다.
반복문을 돌면서 생성된 strRe를 다시 출력해주고 끝났다면 초기화 되어 새로운 문자열을 받아준다.

import java.util.Scanner

fun main() {
    val sc = Scanner(System.`in`)
    repeat(sc.nextInt()){
        val n = sc.nextInt()
        val str = sc.next()
        var strRe = ""

        for (x in str.indices){
            repeat(n){
                strRe += str[x]
            }
        }
        println(strRe)
    }
}

🔎 1152번

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

이 문제는 str의 공백만큼 단어를 세야하는데
코드를 짜면서 생각한건데 공백만큼 단어를 세다보면
맨 앞에도 공백이 올 수 있고 뒤에도 공백이 와서 내가 원하는 만큼의 단어를 세지 못한다.
그래서 .trim() 함수를 이용해서 앞 뒤 공백을 제거해 주고
.split(" ") 을 통헤 공백한큼 변경가능한 리스트 MutableList( ) 에 넣어주었다.
그 뒤 .size를 통해 몇 개의 리스트가 있는지 확인하면 된다.
그런데 여기엔 문제점이 있다. 아예 공백인 리스트를 받으면 1을 내보낸다.
왜냐하면 리스트에 공백이 있다는 건 그 공백이 하나의 단어로 취급받기 때문이다.
그래서 .removeAll() 을 통해 리스트에 일치하는 것이 없을 때 공백을 내보내도록 만들어 주어야 한다.

fun main() {
    val str = readlnOrNull()!!.trim().split(" ").toMutableList()
    str.removeAll(listOf(""))
    println("${str.size}")
}

📌결론

kotlin의 내부 함수의 종류가 많다.
새로운 문제를 풀 때마다 이런 함수를 잘 활용해야겠다..

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글