[Kotlin] 3일차

강다빈·2024년 7월 13일

문자열 다루기 기본

문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s return
"a234" false
"1234" true

class Solution {
    fun solution(s: String): Boolean {
         
        return (s.length==4 || s.length==6) && s.all{
            it.isDigit()
        }
         
    }
}

all 함수

inline fun CharSequence.all(
	predicate: (Char) -> Boolean
): Boolean
  • Returns true if all characters match the given predicate.
💬 공허한 진실
조건문이나 보편적 진술로, 전건이 만족될 수 없기 때문에 참이라는 것. 예를 들어 “방에 있는 모든 휴대전화가 꺼져 있습니다.” 라는 진술은 방에 휴대전화가 없을 때 참이 된다.
  • char sequence에 아무 문자도 포함하고 있지 않으면, predicate에 맞는 문자들이 없기 때문에 함수가 true를 리턴한다.

문자열 섞기

문제 설명
길이가 같은 두 문자열 str1과 str2가 주어집니다.

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

제한사항
1 ≤ str1의 길이 = str2의 길이 ≤ 10
str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
입출력 예

str1 str2 result
"aaaaa" "bbbbb" "ababababab"
``` class Solution { fun solution(str1: String, str2: String): String { var answer = StringBuilder() for (i in str1.indices){ answer.append(str1[i]) answer.append(str2[i]) } return answer.toString() } } ```

다른 사람 풀이

class Solution {
    fun solution(str1: String, str2: String) = str1.zip(str2).joinToString("") { (a, b) -> "$a$b" }
}

zip 을 쓰면 두 리스트의 같은 인덱스에 있는 요소들 끼리 pair를 만들 수 있다. 예를 들어, str1이 "aaaaa"이고 str2가 "bbbbb"이면 결과는 [(a, b), (a, b), (a, b), (a, b), (a, b)]가 된다.

.joinToString("") 으로 빈 문자열을 구분자로 사용하여 결합한다.
람다 함수인 것 같은데, 각 쌍 (a, b)가 aab로 변환되어 ab가 되고, [ ab, ab, ab, ab ] 들이 하나의 문자열로 결합된다.

소수 만들기

문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4

입출력 예 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

Solution.kt
실행 결과
실행 결과가 여기에 표시됩니다.

내 풀이

class Solution {
    fun solution(nums: IntArray): Int {
        var count = 0
        
        // 조합을 통해 세 수를 선택하는 모든 경우를 탐색
        for (i in 0 until nums.size - 2) {
            for (j in i + 1 until nums.size - 1) {
                for (k in j + 1 until nums.size) {
                    val sum = nums[i] + nums[j] + nums[k]
                    
                    // 소수 판별 함수를 이용하여 소수인지 확인
                    if (isPrime(sum)) {
                        count++
                    }
                }
            }
        }
        
        return count
    }
    
    // 소수 판별 함수
    private fun isPrime(num: Int): Boolean {
        
        var check = true
        var x = 2
        if (num <= 1) {
            check=false
        }
        
        // 2는 유일한 짝수 소수
        if (num >= 2) {
            while(x<num){
                if(num%x==0){
                    check=false
                    break
                } 
                x++
            }
        }
        
         
        return check
         
    }
}
profile
SKT DEVOCEAN YOUNG 2기, Kubernetes Korea Group

0개의 댓글