머리싸메면서 간신히 풀었는데 절반까지만 정답 체크되고 절반이 실패를 해서 그냥 찾아서 풀었다.
아래는 내가 작성한 코드
function solution(s) { const a = s.trim().replace(/\s{2,}/gi, ' ').split(" "); const New = []; for (i = 0; i < a.length; i++) { let arr = a[i].split(""); if (arr[0].charCodeAt() >= 48 && arr[0].charCodeAt() <= 57 === false) { arr[0] = arr[0].toUpperCase(); for (let j = 1; j < arr.length; j++) { arr[j] = arr[j].toLowerCase(); } } else { for (let j = 1; j < arr.length; j++) { arr[j] = arr[j].toLowerCase(); } } New.push(arr.join("")); } return New.join(" "); }
문자의 시작이 숫자라면 나머지 문자를 소문자로
문자의 시작이 영어라면 첫번째 문자를 대문자로 하고 나머지를 소문자로
근데 첫번째를 만드는 것은 값을 직접적으로 수정하면서 했지만
나머지 문자열에 대해 접근하는 것을 어떻게 접근을 해야하는지 몰라서 무식하게 반복문으로 돌려버렸다.
그리고 연속공백이라는 예외를 어떻게 처리해야할지 감을 못잡아서
공백을 지우는
trim()
2개 이상의 공백을 1개의 공백으로 바꿔주는
.replace(/\s{2,}/gi, ' ')
두개를 한꺼번에 사용해서 어거지로 끼워맞추기를 했다. 아무튼 틀렸다.
근데 문제가 설명이 너무 개떡같아서 못 푼 것 같다.
내가 생각한 답안은 위에 것이고
아래에 있는 것이 현재 정답처리가 되는 코드의 결과인데
공백이 연속해서 있을 수 있다라고 하여 모든 공백을 없앤 상태로 출력이 나와야한다고 생각한 것이 큰 오판이였다.
아예 처음보는 메소드 2개를 찾았는데
.charAt()와 substring()이였다.
문자열에서 특정 인덱스에 위치하는 유니코드 단일 문자를 반환한다고 적혀있는데, 그냥 적혀있는 데이터를 불러온다고 생각하면 된다.
그리고 그 값은 무조건 String이고 소괄호 속에 공간이 없을 경우에는 초기값이 0이라서 index[0]의 값을 가져온다.
문자열에서 시작한 인덱스부터 종료 인덱스까지 부분적으로 문자열을 반환해주는 메소드다.
시작 값과 종료 값을 따로 정해줄 수 있는데, 종료 값을 정해주지 않는다면 시작 값부터 문자열이 끝나는 곳까지 반환을 해준다.
결국은 손쉽게 풀 수 있음에도 불구하고 삽질을 겁나 미친듯이 많이 했다는 소리고
심지어 자주 사용하지 않다보니 배워서 적어놨음에도 불구하고 사용하지 못한 메소드도 있었다.
function solution(s) {
return s.split(" ").map(a => a.slice(0,1).toUpperCase() + a.slice(1).toLowerCase()).join(" ")
}
slice() 또한 보고싶은 위치를 지정할 수 있고, 종료하는 지점까지도 손 쉽게 파악이 가능하다.
결국은 저...연속공백에 속아서....이꼴이 났다
2022년 1월 14일 기준으로 제한과 테스트 케이스가 추가됐다고 하는데 좀... 자세하게 명시를 해주면 좋겠다
제발
그리고 이걸 풀면서 든 생각인데 자주 사용하는 메소드같은 것들을 한개의 페이지로 정리를 해놓는게 필요할 것 같다
여러개로 나눠서 자세한 사용법을 보는 것은 별개로
어떤 조건에서 사용할 수 있고, 매개변수를 어떤 것을 가지고, 모양이 어떻게 생겼는지. 만 적어놓으면 될 것 같다
공식문서에 전부 다 있지만, 결국 그것은 내가 모르고 배우지 않은 것들에 대해서는 모양 자체를 모르니까
그냥 존재하는 모든 메소드 조건 별로 정리해놔야겠다
오늘 하던가 내일 하던가