2024. 2. 21. 21:07ㆍ공부/코테준비
목차
1. 문제
코딩테스트 연습 - JadenCase 문자열 만들기 | 프로그래머스 스쿨 (programmers.co.kr)
2. 시도
function solution(s) {
let answer = "";
let _s = s.split(' ')
for(let i of _s){
let newi = i.replace(i[0], char => char.toUpperCase());
answer += newi + " "
}
answer = answer.substring(0,answer.length - 1)
return answer;
}
테스트 1 | |
입력값 〉 | "3people unFollowed me" |
기댓값 〉 | "3people Unfollowed Me" |
실행 결과 〉 | 실행한 결괏값 "3people UnFollowed Me"이 기댓값 "3people Unfollowed Me"과 다릅니다. |
두번째 단의 "unFollowed"에서 첫번째 글자만 대문자가 되어 기대값이 달라졌다. 이 부분만 수정하면 된다.
테스트 2 | |
입력값 〉 | "for the last week" |
기댓값 〉 | "For The Last Week" |
실행 결과 〉 | 테스트를 통과하였습니다. |
function solution(s) {
let answer = "";
let _s = s.split(' ')
for(let i of _s){
i = i.toLowerCase();
let newi = i.replace(i[0], char => char.toUpperCase());
answer += newi + " "
}
answer = answer.substring(0,answer.length - 1)
return answer;
}
1. 문자열을 공백을 기준으로 나눈 새로운 배열을 생성.
2. 나누어진 문자열 객체에서 하나의 요소를 모두 소문자로 만든 뒤, 그 첫번째 문자를 대문자로 고친다음 answer에 더하고 맨 뒤에 공백을 추가한다.
3. 가장 마지막의 공백은 필요 없으므로 suvstr해서 제거한다.
3. 결과
테스트 1 | |
입력값 〉 | "3people unFollowed me" |
기댓값 〉 | "3people Unfollowed Me" |
실행 결과 〉 | 테스트를 통과하였습니다. |
테스트 1 〉 | 통과 (0.07ms, 33.5MB) |
테스트 2 〉 | 통과 (0.08ms, 33.5MB) |
테스트 3 〉 | 통과 (0.08ms, 33.5MB) |
테스트 4 〉 | 통과 (0.09ms, 33.4MB) |
테스트 5 〉 | 통과 (0.13ms, 33.5MB) |
테스트 6 〉 | 통과 (0.08ms, 33.6MB) |
테스트 7 〉 | 통과 (0.12ms, 33.5MB) |
테스트 8 〉 | 통과 (0.08ms, 33.4MB) |
테스트 9 〉 | 통과 (0.14ms, 33.6MB) |
테스트 10 〉 | 통과 (0.07ms, 33.5MB) |
테스트 11 〉 | 통과 (0.09ms, 33.4MB) |
테스트 12 〉 | 통과 (0.08ms, 33.4MB) |
테스트 13 〉 | 통과 (0.08ms, 33.6MB) |
테스트 14 〉 | 통과 (0.08ms, 33.5MB) |
테스트 15 〉 | 통과 (0.09ms, 33.4MB) |
테스트 16 〉 | 통과 (0.07ms, 33.5MB) |
테스트 17 〉 | 통과 (0.08ms, 33.2MB) |
테스트 18 〉 | 통과 (0.07ms, 33.2MB) |
프로그래머스 lv2 초입은 그럭저럭 어렵지 않은 문제들이 포진되어 있어 1레벨 정답률 50퍼 미만의 문제들보다 쉽게 느껴진다.
4. 배운점
검색을 했을때 가장 인상적이였던 코드는 아래와 같다.
function solution(s) {
var answer = '';
let result = s.split(' ');
let result2 = result.map(x=> x.charAt(0).toUpperCase() + x.slice(1).toLowerCase());
answer = result2.join(" ")
return answer;
}
1. 문자열을 공백을 기준으로 나눈 새로운 배열 생성. << 여기까진 동일하다.
2. for문을 사용하지 않고 map을 사용한다.
배열 내부의 값을 조건에 밎게 변형시키고 새로운 배열을 뽑아내서 result2에 저장
let result2 = result.map(x=> x.charAt(0).toUpperCase() + x.slice(1).toLowerCase());
charAt(): result2의 각각 배열값인 x에 대하여 0번째 글자를 선택
toUpperCase(): 0번째에 대한 글자를 대문자로 변환
slice(): slice(1)을 통해 인덱스가 1값부터 마지막값까지를 설정
toLowerCase(): 인덱스값이 1인 부분부터는 소문자로 변환
3. join(): 배열의 모든 요소를 연결해 하나의 문자열로 변환
내가 짠 코드와의 주요한 차이는 for문대신 map을 사용하여 성능을 높였다는 것과,
공백을 추가하고 나중에 공백을 제거하는 대신 join할 때 공백을 넣어 합쳤다는 차이가 있다.
function solution(s) {
let _s = s.split(' ')
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
.join(" ");
return _s;
}
작정하고 줄이면 거의 한줄로 줄일 수 있었다.
'공부 > 코테준비' 카테고리의 다른 글
[Node.js_4기] 코드카타 : 할인행사 (24/03/08) (0) | 2024.03.11 |
---|---|
[Node.js_4기] 코드카타 : n개의 최소 공배수 (24/03/07) (0) | 2024.03.07 |
[Node.js_4기] 코드카타 : 피보나치 수열 (24/02/26) (0) | 2024.02.26 |
[Node.js_4기] 코드카타 : 이진 변환 반복하기 (24/02/22) (0) | 2024.02.22 |
[Node.js_4기] 코드카타 : 둘만의 암호 (24/02/15) (1) | 2024.02.15 |