Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 2 : JadenCase 문자열 만들기 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 2 : JadenCase 문자열 만들기

썸머몽 2023. 4. 8. 16:47
728x90

문제 및 제한사항

 

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

문자열 s 주어졌을 , s JadenCase 바꾼 문자열을 리턴하는 함수, solution 완성해주세요.

 

**제한사항**

s는 길이 1 이상 200 이하인 문자열입니다.

s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.

- 숫자는 단어의 첫 문자로만 나옵니다.

- 숫자로만 이루어진 단어는 없습니다.

- 공백문자가 연속해서 나올 있습니다.

 

풀이 방법

 

예를 들어 주어진 문자열이 "3people unFollowed me" 라면 "3people Unfollowed Me"로 반환되어야 한다.

 

대문자와 소문자를 혼용하고 있으므로 모두 소문자로 맞춰주고, 그걸 sArry라는 배열로 만들었다.

for문으로 sArry의 요소들을 순회할 때, 해당 인덱스가 공백이면서 그 다음 인덱스가 존재한다면 그 다음 인덱스를 대문자로 만들었다.

즉 앞이 공백이므로 그 다음 인덱스는 첫 번째 문자가 되기 때문이다. 그 대문자인 인덱스를 upper라고 선언한 후, sArry에 바꿔 넣어준다.

또 i가 0일 때 (문장의 첫 단어) 이거나 해당 인덱스보다 앞이 공백이라면 똑같이 대문자로 만들어주고 바꿔 넣어준다.

 

여기서 맨 처음에 계속 오류가 났던 부분은, sArry[i+1] 의 존재 여부 체크였다.

sArry[i+1]이 존재하지 않는다면 upper, splice 부분에서 오류가 나기 때문에 이 값이 있는 값인지를 체크해줘야 한다.

 

근데 이런 식으로 계속 코드를 덧붙이는 형태는 가독성에서도 알고리즘을 고려했을 때에도 좋지 않다고 한다.

 

function solution(s) {
    var answer = '';
    for (let i = 0; i < s.length; i++) {
      if (i === 0 || s[i-1] === " ") {
        answer += s[i].toUpperCase();
      } else {
        answer += s[i].toLowerCase();
      }
    }
    return answer;
}

 

나와 비슷한 듯 다른 다른 분의 풀이

문장의 첫 문자거나 인덱스의 앞에 공백이라면 해당되는 인덱스는 대문자로, 그렇지 않으면 소문자로 변환해 더해줬다.

이런 방식도 있군...

 

 

코드

function solution(s) {
    let sLower = s.toLowerCase()
    let sArry = Array.from(sLower)
    for (let i = 0; i < sArry.length; i++) {
        if (sArry[i] === ' ' && sArry[i+1]) {
            let upper = sArry[i+1].toUpperCase()
            sArry.splice(i+1, 1, upper)
        } else if (i === 0 || sArry[i-1] === ' ') {
            let upper = sArry[i].toUpperCase()
            sArry.splice(i, 1, upper)
        } 
    } return sArry.join('')
}
728x90