2월 1일 TIL

이승원·2024년 2월 1일
0

TIL

목록 보기
14/75
post-thumbnail

프로그래머스 코딩테스트 [ JadenCase 문자열 만들기 ]

Github 링크

  • 이 문제는 주어진 String의 각 단어의 첫번째 글짜를 uppercase로 바꾸고, 나머지는 lowercase 즉 JadenCase로 문자열을 변경하는것이다.
  • 일단 당연히 공백 문자가 있으니깐 split(separator: " ")를 사용했는데, 공백문자가 하나 이상이 연속으로 나올 수 있다고 하여 찾아보니 방법이 있었다.
s.split(separator: " ", omittingEmptySubsequences: false)
  • 위 방법으로 하면 공백문자 또한 split된다. 당연히 separator: " " 를 했으니 , 공백이 3개면 두개만 나오는것이다.
  • 그리고 split하면 [subString]으로 나오니깐 map을 이용해서 각각의 요소를 소문자로 우선적으로 바꾸고, 다시 map을 이용해서 각요소의 첫번째 글자를 대문자로 변경할려고 했다.
  • 하지만 프로그래머스 컴파일러에서는 map쓰고 또 거기에 map을 쓰니깐 에러가 났다. playground에서는 잘됐는데. 너무 복잡하다는 의미 이기도 하다는 것이다. 그래서 map을 하나만 쓰는 방식으로 변경했다. 그리고 정확하지는 않지만 매개변수와 반환타입을 작성해서 쓰면 더욱 더 정확하게 컴파일러한테 전달이 되서 그런것 같다. 다시 말해 클로저의 반환타입을 컴파일러가 추론을 하지 못해서 생기는 오류인것 같다.
// 원래 코드  오류 
	func solution(_ s:String) -> String {
		let upper = (Array(s.split(separator: " ",omittingEmptySubsequences: false)).map{ String($0.lowercased())}).map{$0 == "" ? ( $0[$0.startIndex].uppercased() + $0.dropFirst()) : ""}
   return upper.joined(separator: " ")
	}

// 변경된 코드 
	func solution(_ s:String) -> String {
   		let upper = Array(s.split(separator: " ", omittingEmptySubsequences: false)).map {
    	if $0 == "" {
        	return ""
    	} else {
        	return $0.lowercased().prefix(1).uppercased() + $0.lowercased().dropFirst()
        } 
    }
    return upper.joined(separator: " ")
	}
profile
개발자 (진)

0개의 댓글