[Kotlin] 2일차

강다빈·2024년 7월 12일

대소문자 바꾸기

문제 설명

영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

제한사항

1 ≤ str의 길이 ≤ 20
str은 알파벳으로 이루어진 문자열입니다.

입출력 예

입력 #1

aBcDeFg
출력 #1

AbCdEfG

fun main(args: Array<String>) {
    val s1 = readLine()!!
    val result = s1.map{
        when {
            it.isLowerCase() -> it.toUpperCase()
            it.isUpperCase() -> it.toLowerCase()
            else -> it
        }
    }.joinToString("")
    print(result)
}

특수문자 출력하기

fun main(args: Array<String>) {
    print("!@#$%^&*(\\'\"<>?:;")
    
}

덧셈식 출력하기

fun main(args: Array<String>) {
    val (a, b) = readLine()!!.split(' ').map(String::toInt)
    println("$a + $b = ${a+b}")
}

문자열 붙여서 출력하기

fun main(args: Array<String>) {
    val input = readLine()!!.split(' ')
    val s1 = input[0]
    val s2 = input[1]
    var res = s1.plus(s2)
    print(res)
    
}

plus 는 문자열들을 서로 연결한다.

operator fun plus(other: Any?): String

다른 사람 풀이

 
fun main(args: Array<String>) {
    println(readln().replace(" ", ""))
}

문자열 돌리기

fun main(args: Array<String>) {
    val s1 = readLine()!!
    var a = 0
    while(a<s1.length){
        println(s1[a])
        a++
    }
}

문자열을 읽어와서 각 문자를 println에 전달한다.

다른 사람 풀이

fun main(args: Array<String>) {
    val s1 = readLine()!!
    s1.map(::println)
}

홀짝 구분하기

fun main(args: Array<String>) {
    val a = readLine()!!.toInt()
    when{
        a%2==0 -> print("$a is even")
        a%2==1 -> print("$a is odd")
        else -> "$a"
    }
}

다들 if 문으로 한 줄 출력하는 걸 선호하는 듯

문자열 겹쳐쓰기

문제 설명

문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항

my_string와 overwrite_string은 숫자와 알파벳으로 이루어져 있습니다.

  • 1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
  • 0 ≤ s ≤ my_string의 길이 - overwrite_string의 길이

입출력 예

my_string overwrite_string s result
"He11oWor1d" "lloWorl" 2 "HelloWorld"
"Program29b8UYP" "merS123" 7 "ProgrammerS123"

입출력 예 설명

입출력 예 #1

예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.

입출력 예 #2

예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에 해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.

접두사 -> my_string의 첫번째부터 인덱스 s 전까지 잘라낸다.
접미사 -> 문자열을 겹쳐쓰고 나서 남게 되는 글자들을 뒤에 붙이기 위해 추출한다.

s = 2, overwrite_string.length= 7 이라면,suffix는 인덱스 9부터 끝까지 남아있는 문자를 추출한 것이 된다.

class Solution {
    fun solution(my_string: String, overwrite_string: String, s: Int): String {
         
        var pre = my_string.substring(0, s)
        var suf = my_string.substring(s + overwrite_string.length)
        var answer: String =  pre + overwrite_string + suf
        return answer
    }
}
다른 사람 풀이

2
3
4
5
class Solution {
    fun solution(myString: String, overwriteString: String, s: Int): String =
        myString.replaceRange(s, s + overwriteString.length, overwriteString)
}

나도 replaceRange 쓰려고 했는데.. s만 쓰고 s+overwriteString.length를 생각하지 못했다.
replaceRange

fun String.replaceRange(
    startIndex: Int,
    endIndex: Int,
    replacement: CharSequence
): String
(source)

contains

contains(str) : 특정 문자열이 포함되어있는지 확인한다.

operator fun CharSequence.contains(
	other: CharSequence,
	ignoreCase: Boolean = false
): Boolean
  • ignoreCase - true to ignore character case when comparing strings. By default false.

부분 문자열

문제 설명
어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다. 예를 들어 문자열 "abc"는 문자열 "aabcc"의 부분 문자열입니다.

문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면 1을 부분 문자열이 아니라면 0을 return하도록 solution 함수를 완성해주세요.

제한 사항
1 ≤ str1 ≤ str2 ≤ 20
str1과 str2는 영어 소문자로만 이루어져 있습니다.
입출력 예
str1 str2 result
"abc" "aabcc" 1
"tbt" "tbbttb" 0

class Solution {
    fun solution(str1: String, str2: String): Int {
         
        return  if(str2.contains(str1)) 1 else 0
    }
}

filter를 써야되는 줄 알았는데, filter 는 파라미터로 char가 들어가야 한다.

inline fun CharSequence.filter(
    predicate: (Char) -> Boolean
): CharSequence
다른 사람 풀이

class Solution {
    fun solution(str1: String, str2: String): Int {
        var answer: Int = 0
        return if (str1 in str2) 1 else 0
    }
}

그냥 in을 써도 되는구나..

profile
SKT DEVOCEAN YOUNG 2기, Kubernetes Korea Group

0개의 댓글