프로그래머스 [JadenCase 문자열 만들기] - 구현 Lv.2

JH.P·2022년 7월 28일

구현

  • 문제의 요구사항에 맞춰 구현하는 문제이다.

풀이 과정

  • 아래와 같이 공백을 기준으로 문자열들을 분리한 후, 각 문자열들을 다시 배열로 분리 한다.
s = s.split(' ').map(item => item.split(''))

return s

[["3","p","e","o","p","l","e"],["u","n","F","o","l","l","o","w","e","d"],["m","e"]]
  • 띄어쓰기를 기준으로 어절들을 각자 분리하는데 성공했으니, 이제 각 어절의 첫글자를 대문자로 변환한다.
  • 코드 실행 시 틀렸다고 나와서 어디가 틀렸는지 고민했는데 제이든 케이스는 첫글자는 대문자이고 나머지 글자는 모두 소문자여야한다.
    for(let i = 0; i < s.length; i++) {
        s[i][0] = s[i][0].toUpperCase()
        for(let j = 1; j < s[i].length; j++) {
            s[i][j] = s[i][j].toLowerCase()
        }
      
    }

위와 같이 제출하고 채점을 해보면, 런타임 에러가 다수 발생한다.
제한 사항을 잘 보면, 어절 사이의 공백이 연속으로 등장하는 경우도 있을 수 있다고 한다.
예를 들어

'hihi  hello'

와 같은 경우, 공백을 기준으로 각 어절을 분리하여 제이든 케이스를 만들면,

0: (5) ['H', 'i', 'h', 'i']
1: []
2: (5) ['H', 'e', 'l', 'l', 'o']

위와 같이 연속으로 등장하게 된 두번 째 공백이 빈 배열로 생성이 된다.
따라서 각 어절을 순회하게 될 때, 빈 배열의 경우에는 순회를 skip하도록 하면 통과된다.

function solution(s) {
    s = s.split(' ').map(item => item.split(''))
    for(let i = 0; i < s.length; i++) {
        if(s[i].length === 0) {		// 빈 배열(연속된 공백)의 경우 순회 통과
            continue;
        }
        s[i][0] = s[i][0].toUpperCase()
        for(let j = 1; j < s[i].length; j++) {
            s[i][j] = s[i][j].toLowerCase()
        }
      
    }

    return s.map(item => item.join('')).join(' ')
}
profile
꾸준한 기록

0개의 댓글