Android/Algorithm

[프로그래머스 / Kotlin] 이상한 문자 만들기

정생강 2024. 3. 18. 21:21

[프로그래머스 / Kotlin] 이상한 문자 만들기

 

 

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

-  제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

 

 

 

해결 과정

해당 문제는 toUpperCase와 toLowerCase를 사용하면 쉽게 풀 수 있는 문제라고 생각했다. 문제를 풀다 고민한 부분은 제한사항 1인데 해당 문장 자체를 홀수 번째 짝수번째 구분하는 것이 아니라 단어 기준으로 변환을 해야하는 것이다. 

이 부분을 해결하기 위해 띄어쓰기를 기준으로 각 단어를 잘라 배열에 저장한 후 반복문을 이용하여 각 단어마다 홀짝을 구분해 대문자, 소문자로 구분하였다.

 

// 1차 코드 - 띄어쓰기 에러
class Solution {
    fun solution(s: String): String {
        var worlds = s.split(" ")
        var answer = ""
        for(i in 0 until worlds.size){
            for(j in 0 until worlds[i].length){
                if(j % 2 == 0)  answer += worlds[i][j].toUpperCase()
                else answer += worlds[i][j].toLowerCase()
            }
            answer += " "
        }
        return answer
    }
}

 

변환한 단어들을 다시 합칠 때 띄어쓰기를 넣기 위하여 for문의 마지막에 코드를 작성했지만 문장의 마지막에 공백이 들어가는 문제가 발생했다. 변환은 잘 이루어 지지만 문장의 마지막에 불필요한 공백이 들어가 에러가 뜨는 것이다.

 

이 부분을 최종적으로 수정해 코드를 다시 제출하였다.

 

 

 

내가 푼 코드

class Solution {
    fun solution(s: String): String {
        var worlds = s.split(" ")
        var answer = ""
        for(i in 0 until worlds.size){
            for(j in 0 until worlds[i].length){
                if(j % 2 == 0)  answer += worlds[i][j].toUpperCase()
                else answer += worlds[i][j].toLowerCase()
            }
            if(i == worlds.size - 1) break
            answer += " "
        }
        return answer
    }
}

 

 

 

후기

다시 한번 다짐! 제한 사항을 잘 읽자.

코드를 제출 하기 전에 머릿 속으로 시뮬레이션을 돌리고 재출 할 것.

실전에선 시뮬레이터를 돌릴 기회가 없을 확률이 높다.

연습 시에는 편하게 재재출하며 코드를 수정하지만 현장에선 그러지 못 할 확률이 높으니 이런 쉬운 실수는 놓치지 말 것