[A&I Code Camp] Day8 (takeLast)

Hood·2024년 9월 18일

A&I Code Camp

목록 보기
8/38
post-thumbnail

✍   Kotlin을 사용한 프로그래머스 Lv. 0 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
주말을 제외한 모든 날에 하루 5문제씩
프로그래머스 Lv.0 문제에 대한 풀이입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


접미사인지 확인하기

이 문제는 저번 접두사인지 확인하기의 반대 개념이라고 생각하면 될 것 같다.
접두사에서는 startsWith를 써주었다면 이 문제는 마무리가 같아야하기에 endsWith()를 사용했다.

class Solution {
    fun solution(my_string: String, is_prefix: String): Int {
        return if(my_string.endsWith(is_prefix)) 1 else 0
    }
}

문자열의 뒤의 n글자

이 문제는 문자열 앞의 n글자의 반대개념이여서 조건에 맞는 범위를 설정해준 뒤 출력해주었다.
그런데 takeLast()라는 내부함수가 있어 쉽게 출력할 수 있다는 사실을 알았다.

  • takeLast() : 원소들 중 마지막 n개의 원소를 담은 리스트를 반환하는 함수
class Solution {
    fun solution(my_string: String, n: Int) = my_string.slice(my_string.length - n until my_string.length)
}
//모범 답
class Solution {
    fun solution(my_string: String, n: Int): String {
        return my_string.takeLast(n)
    }
}

부분 문자열 이어 붙여 문자열 만들기

이 문제는 조금 어려웠는데 my_strings의 리스트 중의 문자열을 하나씩 가져오고
parts의 배열 안 범위를 인덱싱하는 과정을 여러번 거친 후 문자열 하나를 만든다.
그렇다는 얘기는 반복문을 통해 my_strings를 indices()를 통해 문자열 하니씩 가져오고
여기서는 substring()를 통해 part안의 배열을 인덱싱할 범위를 가져와서 필요한 부분만 가져온 뒤
result 안에 추가해 주었다. 이렇게 되면 result안 변수에 자른 문자열이 리스트 형식으로 들어올 것이다.
그래서 .toString()을 통해 하나의 문자열로 바꿔주었다.

모범 답을 보면 .joinToString("")을 나도 생각했었는데
문법을 제대로 몰라 아쉬웠던 문제였다.

class Solution {
    fun solution(my_strings: Array<String>, parts: Array<IntArray>): String {
        val result = StringBuilder()
        for (x in my_strings.indices){
            result.append(my_strings[x].substring(parts[x][0], parts[x][1] + 1))
        }
        return result.toString()
    }
}
//모범 답
class Solution {
    fun solution(my_strings: Array<String>, parts: Array<IntArray>) : String =
        my_strings.indices.joinToString("") { my_strings[it].substring(parts[it][0], parts[it][1] + 1) }
}

글자 이어 붙여 문자열 만들기

이 문제도 마찬가지로 위 처럼 풀었다.
그런데 문자열의 위치에서만 한 글자씩 가져오면 되는 거라 좀 더 쉬웠다.

class Solution {
    fun solution(my_string: String, index_list: IntArray): String {
        val word = StringBuilder()
        for (x in index_list){
            word.append(my_string[x])
        }
        return word.toString()
    }
}
class Solution {
    fun solution(my_string: String, index_list: IntArray): String {
        var answer: String = ""
        return index_list.map { my_string[it] }.joinToString("")
    }
}

수 조작하기 1

이 문제는 말 그대로 문자열에서 한 글자씩 가져와 'w', 's', 'd', 'a' 마다 각각의 값들을 더하고 빼주는 문제이다.
그래서 if 를 사용해서 그게 맞다면 숫자를 더하고 빼라 라는 조건문을 사용해서 풀었다.

모범적인 답이라고 생각한 것은 이 범위를 map으로 설정하고 풀어주는 것인데
아직 이해를 제대로 못하겠다.

class Solution {
    fun solution(n: Int, control: String): Int {
        var num = n
        for (x in control.indices) {
            if (control[x] == 'w') {
                num += 1
            } else if (control[x] == 's') {
                num -= 1
            } else if (control[x] == 'd') {
                num += 10
            } else if (control[x] == 'a') {
                num -= 10
            }
        }
        return num
    }
}
//모범 답
class Solution {
    fun solution(n: Int, control: String): Int {
        val map = mapOf('w' to 1, 's' to -1, 'd' to 10, 'a' to -10)
        return control.fold(n) { acc, w -> acc + map.getValue(w) }
    }
}

📌결론

아직 문법을 제대로 마스터 하지는 못했지만 점차 문제를 푸는 실력이 느는 게 보여 좋았다.

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

0개의 댓글