2023-08-08

Owler·2023년 8월 8일
0
post-thumbnail

코틀린 주어진 문자열 대.소문자 변경

나의 풀이

우선 보자마자 머리속으로 구상한 방법은 아래와 같다.

  1. 주어진 문자열에서 if문으로 대문자일 경우 소문자로, 소문자일 경우 대문자로 일일히 하나씩 비교하는 방법
    2.새로운 빈 문자열을 만든 뒤 주어진 문자열을 앞에서부터 하나씩 변경 하자마자 새로운 문자열에 넣는 방법

1번 방법은 코틀린을 접하기 전 내 생각을 기반으로 생각했고, 2번 풀이는 이전 알고리즘 문제풀이 방법을 참고해서 고안해보았다.

매번 알고리즘 풀이를 하면서 1번처럼 생각해서 낭패를 많이 봤으므로 2번을 머리속에 두고 코드를 짜보았다.

class Solution {
    fun solution(my_string: String): String {
        val answer : String = StringBuilder()
        
        for(char in my_string){
            when{
                char.isUpperCase() -> answer.append(char.toLowerCase())
                char.isLowerCase() -> answer.append(char.toUpperCase())
                else -> answer.append(char)
            }
        }
        
        return answer
    }
}

빈 문자열 anser을 StringBuilder() 함수를 이용하여 생성한뒤
for문으로 주어진 my_string 문자열 안에 문자(char)를 첨부터 끝까지 반복한다.

대문자일 경우 /char.isUpperCase()/ 새로운 문자열 answer 에 append 하면서 소문자로 /toLowerCase()/ 변경해서 넣는다
소문자일 경우 /char.isLowerCase()/ 새로운 문자열 answer 에 append 하면서 대문자로 /toUpperCase()/ 변경해서 넣는다

그리고 answer문자열을 리턴받는다.. 라고 생각해서 넣었는데 실패했다..ㅠ

그리고 작성중에 이전 글을 참고하면서 비교해보니 떡하니 보이는 문제점..!
마지막에 return 할때 나는 문자열로 변환하지 않았던것 ㅠㅜ... 그래서 answer 뒤에 .toString()을 붙여주니 바로 해결되었따 ㅠㅡ.ㅠ

다른사람의 풀이

class Solution {
    fun solution(my_string: String): String = 
    my_string.map { Char((it.code - 33) % 64 + 65) }.joinToString("")
}

아예 생각해보지 못했던 방법은 아닌데 C언어를 했을 때도 아스키 코드 너무 복잡해서 공부를 제대로 안했던것이...문제였따 ㅎㅎ 그래서 챗 gpt의 도움을 받아서 해석해 보았다.

느낀점

오랜만에 봐도 헷갈리는 아스키코드.. 아마 아스키코드를 아는 사람들은 쉽게 간결하게 풀면서도 보는 사람도 이해하기 편하겠지만, 좀더 보편적으로 생각해보면 가독성은 내코드가 더 좋아보인다 :)

profile
junior_developer

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기