[A&I Code Camp] Day13 (pow, abs, toRegex)

Hood·2024년 9월 25일

A&I Code Camp

목록 보기
13/38
post-thumbnail

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

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


주사위 게임1

이번 문제는 a,b 둘 다 홀수일때 모두 2제곱을한 것을 더해주고
둘 중 하나만 홀수일때 2 * (a + b)를 둘 다 짝수면 절대값 (a - b)를 해준 것을 반환한다.
코틀린에서 2제곱은 .pow(2)를 통해 사용할 수 있는데 이것은 변수가 Double 형태일 때 가능하다.
그래서 더블로 바꿔주고 그 값을 다시 Int로 바꾸어 주었다,
그리고 절대값은 .abs()를 통해 사용할 수 있다.
이에 따라 조건을 만족하는 식을 만들었다.

import kotlin.math.*

class Solution {
    fun solution(a: Int, b: Int): Int {
        var answer: Int = 0
        if (a % 2 == 1 && b % 2 == 1){
            answer = a.toDouble().pow(2).toInt() + b.toDouble().pow(2).toInt()
        } else if (a % 2 == 1 || b % 2 == 1){
            answer += 2 * (a + b)
        } else {
            answer += abs(a - b)
        }
        return answer
    }
}

뒤에서 5등까지

뒤에서 5등 위로와 문제가 비슷한데
그래서 리스트를 정렬하고 .slice 를 통해 앞의 5개를 추출해준 뒤 IntArray로 변환해 주었다.
slice() 말고 take()를 통해서도 값을 가져올 수 있다.

class Solution {
    fun solution(num_list: IntArray): IntArray {
        return num_list.sorted().slice(0..4).toIntArray()
    }
}

배열의 원소만큼 추가하기

이 문제는 배열의 숫자 만큼 배열에 그 값을 추가한 배열을 만드는 것이 목표이다.
그래서 일단 배열의 숫자 인덱스를 가져와 그것을 repeat()을 통해 그 숫자만큼 반복시켜주고
answer안에 그 숫자를 넣어주었다.

class Solution {
    fun solution(arr: IntArray): IntArray {
        var answer: IntArray = intArrayOf()
        for(x in arr.indices){
            repeat(arr[x]){
                answer+=arr[x]
            }
        }
        return answer
    }
}

문자열 바꿔서 찾기

이번 문제는 문자열을 A -> B , B -> A로 만든 뒤 그것이 pat과 비교해 같으면 1을 아니면 0을 내보내는 문제이다.
그래서 A와 B를 변환시켜준 뒤 return으로 그것이 안에 있는지 확인하였다.
변환 과정에서 List로 만들어 주었지만 .joinToString("")을 통해 문자열 하나로 만들어 주었다.

class Solution {
    fun solution(myString: String, pat: String): Int {
        val answer = myString.toMutableList()

        for(x in answer.indices){
            if (answer[x] == 'A'){
                answer[x] = 'B'
            } else {
                answer[x] = 'A'
            }
        }

        return if(pat in answer.joinToString("")) 1 else 0
    }
}

l로 만들기

이 문제는 알파벳 l보다 앞에 있는 문자는 전부 l로 바꾸는 문제이다.
그래서 이전 문제와 같이 문자열을 List로 만들어 그것의 인덱스를 가져온 뒤
l.code 이하면 l보다 앞서는 것으로 그것을 l로 만들어주었다.

class Solution {
    fun solution(myString: String): String {
        val answer = myString.toMutableList()
        for(x in answer.indices){
            if(answer[x].code < 'l'.code){
                answer[x] = 'l'
            }
        }
        return answer.joinToString("")
    }
}

다른 사람의 문제 풀이를 보니 .replace의 자비정규식으로도 풀 수 있다는 것을 알았다.

  • toRegex() : 자바정규식으로 변환해주는 표현식
class Solution {
    fun solution(myString: String) = myString.replace("[a-k]".toRegex(), "l")
}

📌결론

내장 함수에 익숙해 진다는 것에 만족한 문제들이었다.

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

0개의 댓글