반응형
250x250
11-28 10:53
Today
Total
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[Swift] 프로그래머스 연습 문제(Level 2) : JadenCase 문자열 만들기 본문

CS(컴퓨터 과학)/Coding Test

[Swift] 프로그래머스 연습 문제(Level 2) : JadenCase 문자열 만들기

billnjoyce 2022. 3. 28. 11:16
728x90
반응형
실제 코딩테스트의 문제를 통하여 알고리즘 분석과 코딩 능력을 향상시킵니다.

 

 

#. 구독 대상

  • 기본 알고리즘을 코딩 테스트 문제를 통하여 학습하고 싶으신 분
  • 취업 및 이직을 준비하고 계신 개발자
  • Swift를 통하여 코딩 테스트 문제를 살펴보고 이해를 하고 싶으신 분
  • 코딩 테스트에 대한 거부감을 없애기 위하여 기초부터 하나씩 공부해보고 싶으신 분
  • 기타 알고리즘과 문제 해결 능력에 대해서 관심이 있는 모든 개발자분
참고 사항

본 코딩 테스트 문제에 대한 설명 및 해결 방안은 최적의 답이 아닐 수 있습니다.

본 강의에서 지향하는 목표는 바로 특정 문제에 대한 최적의 해결 방법을 찾기보다는 특정한 문제에 대해서 충분히 이해할 수 있고 다양한 방법을 통하여 해결하는 방법을 찾고 향상시키는데 그 목적이 있습니다.

좀 더 좋은 알고리즘 및 코드가 있으시다면 언제든지 본 게시물의 댓글을 통해서 제시해주시면 감사하겠습니다.

 

 

 


 

 

 

코딩 테스트 문제

 

먼저 오늘 살펴볼 문제에 대해서 먼저 살펴보겠습니다.

 

https://programmers.co.kr/learn/courses/30/lessons/12951

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고

programmers.co.kr

 

 

 

 


 

 

 

문제 설명

 

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

 

 

 

 


 

 

 

제한 조건

 

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

 

 

 

 


 

 

 

 

입출력 예

s return
"3people unFollowed me"        "3people Unfollowed Me"             
"for the last week" "For The Last Week"

 

 

 

 


 

 

문제 분석

 

오늘 문제는 입력되는 문자열을 JadenCase 문자열로 바꿔서 반한하는 문제로서 JadenCase 문자열이라 문자열에서 모든 단어 첫 시작 문자만 대문자로 변환하고 나머지 문자는 소문자로 하는 형태의 문자열을 뜻합니다. 문자를 제외한 숫자는 그대로 유지합니다.

 

그럼 JadenCase 문자열을 만들기 위한 알고리즘을 하나씩 살펴보도록 하겠습니다.

 

 

 

 

 


 

 

 

알고리즘

 

그렇다면 본 문제를 해결하기 위한 알고리즘을 하나씩 살펴보면 아래와 같습니다.

 

 

  • 결과를 저장하고 반환할 문자열을 선언합니다.
  • 입력 문자열을 문자 배열로 변환합니다.
  • 문자 배열에서 문자열의 시작을 체크할 플래그를 선언한다.
  • 문자 배열을 전체적으로 돌면서 한 문자씩 체크한다.
  • 플래그 값이 참(true)이면 첫 문자이므로 대문자로 그렇지 않으면 소문자로 변환한다.
  • 공백 문자가 있을 경우 문자열의 시작 플래그를 참으로 설정한다.
  • 최종 결과 문자열을 반환한다.

 

 

 

 


 

 

 

코드 설명

 

그렇다면 위의 알고리즘에 대해서 하나씩 살펴보면서 코드로 작성을 해보도록 하겠습니다.

 

 

  • 결과를 저장하고 반환할 문자열을 선언합니다.
var result: String = ""

 

  • 입력 문자열을 문자 배열로 변환합니다.
let str: [String] = s.map{ String($0) }

 

  • 문자 배열에서 문자열의 시작을 체크할 플래그를 선언한다.
var first: Bool = true

 

  • 문자 배열을 전체적으로 돌면서 한 문자씩 체크한다.
for char in str {
    
}

 

  • 플래그 값이 참(true)이면 첫 문자이므로 대문자로 그렇지 않으면 소문자로 변환한다.
for char in str {
    result.append(first ? char.uppercased() : char.lowercased())
}

 

  • 공백 문자가 있을 경우 문자열의 시작 플래그를 참으로 설정한다.
for char in str {
    result.append(first ? char.uppercased() : char.lowercased())

    first = char == " "
}

 

  • 최종 결과 문자열을 반환한다.
return result

 

 

 

 

 

 

 

위의 코드들을 모두 조합하여 최종 코드를 완성하면 아래와 같습니다.

 

 

최종 코드

func solution(_ s:String) -> String {
    // 결과를 저장하고 반환할 문자열을 선언합니다.
    var result: String = ""
    
    // 입력 문자열을 문자 배열로 변환합니다.
    let str: [String] = s.map{ String($0) }

    // 문자 배열에서 문자열의 시작을 체크할 플래그를 선언한다.
    var first: Bool = true
    
    // 문자 배열을 전체적으로 돌면서 한 문자씩 체크한다.
    for char in str {
        // 플래그 값이 참(true)이면 첫 문자이므로 대문자로 그렇지 않으면 소문자로 변환한다.
        result.append(first ? char.uppercased() : char.lowercased())
        
        // 공백 문자가 있을 경우 문자열의 시작 플래그를 참으로 설정한다.
        first = char == " "
    }
    
    // 최종 결과 문자열을 반환한다.
    return result
}

 

 

 

 

 


 

 

 

이상으로 오늘 제시한 문제에 대해서 분석 및 코드를 작성해 보았습니다.

 

감사합니다.

 

 

 

 


[참고 자료(References)]

 

 

[1] 프로그래머스 - JadenCase 문자열 만들기 : https://programmers.co.kr/learn/courses/30/lessons/12951

728x90
반응형
Comments