[프로그래머스] JadenCase 문자열 만들기

YoungHyun Kim·2023년 12월 13일
1

매일매일 알고리즘

목록 보기
22/30

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

풀이

  1. 입력으로 받은 문자열을 배열로 재배치한다.
  2. 공백이나 숫자가 아닌 단어의 첫 번째 요소를 만나면 count 변수를 0에서 1로 증가시키고, 해당 알파벳을 uppercase() 메소드를 활용해 대문자로 배열 temp에 추가한다. (count 변수가 대문자로 변환할지 결정하는 플래그 역할을 하게 됨)
  3. 공백이라면 count 변수를 0으로 만들고 공백을 temp 배열에 추가한다.
  4. 공백이 아니고 숫자라면 count 변수를 증가시키고 해당 숫자를 temp 배열에 추가한다.
  5. 이 외의 모든 알파벳은 lowercase() 메소드를 활용해 소문자로 temp 배열에 추가한다.
func solution(_ s:String) -> String {
    var input = Array(s), count = 0, temp = [String]()
    
    for thing in input {
        if Int(String(thing)) == nil {
            if count == 0 && thing != " " {
                temp.append(thing.uppercased())
                count += 1
            } else if thing == " " {
                temp.append(" ")
                count = 0
            } else {
                temp.append(thing.lowercased())
            }
        } else if let intThing = Int(String(thing)) {
            temp.append(String(intThing))
            count += 1
        }
    }
    return temp.joined()
}

회고

  • 처음에 몇 가지 테스트케이스를 통과하지 못했는데, 이는 입력으로 받은 문자열의 첫 시작이 공백일 때의 예외를 적절히 처리하지 못해서 그런 것이었다.
  • 이 문제를 for 문 내에 첫 번째 if 문의 조건을 if count == 0 && thing != " "로 작성함으로 해결할 수 있었다.
  • 여러 테스트케이스를 생각해내는 방법에 대해서 조금 찾아보고, 문제 풀이에 적용할 수 있도록 노력해야겠다.
profile
iOS 개발자가 되고 싶어요

0개의 댓글