[풀이]
function solution(s) {
return s
.toLowerCase()
.split(" ")
.map((str) => {
return str
.split("")
.map((el, idx) => (idx % 2 === 0 ? el.toUpperCase() : el))
.join("");
})
.join(" ");
}
1. s를 먼저 모두 소문자로 바꿔준다.
→ 단순히 예제만 보고 생각했을 때 모두 소문자라 생각을 못했는데.. 많은 가능성을 열어두고 생각해야 했다.
예제가 모두 소문자라 할지라도 여러가지 경우의 수가 있으며 인덱스 홀수 번째 문자가 대문자일 수도 있다. (이 생각을 못함)
나무를 보지말고 숲을 봐야한다. 코딩테스트를 풀 때는 히든케이스도 고려해야 한다.
2. 그리고 공백을 기준으로 문자열을 잘라 배열에 넣어준다.
예시) "try hello world" → ['try', 'hello', 'world']
3. map함수를 이용해 배열 안의 모든 요소에 적용시켜준다.
4. 배열안의 단어들을 쪼개준다. 그리고 map 함수를 이용해 인덱스 번호가 짝수이면 대문자로 바꿔준다.
예시) ['try', 'hello', 'world'] 에서
['t', 'r', 'y'] 로 쪼개고 인덱스 번호가 짝수이면 (0 과 2) 대문자로 바꿔준다. ['T', 'r', 'Y']
그리고 join()을 통해 붙여준다. ['TrY']
이 과정을 단어마다 똑같이 반복해주면 ['TrY', 'HeLlO', 'WoRlD']
5. 위 과정을 끝낸 후 "공백"을 기준으로 다시 붙여준다. 'TrY HeLlO WoRlD'
[추가 풀이]
function solution(s) {
const words = s.toLowerCase().split(" ");
const result = [];
for (let i = 0; i < words.length; i++) {
let temp = "";
for (let j = 0; j < words[i].length; j++) {
temp += !(j % 2) ? words[i][j].toUpperCase() : words[i][j];
}
result[i] = temp;
}
return result.join(" ");
}
1. s를 소문자로 모두 만들고 공백을 기준으로 잘라서 words 라는 변수에 담아준다. ['try', 'hello', 'world']
2. 배열을 담을 result 변수를 만든다.
3. for문을 이용해 words 를 순회해준다.
예시) "try hello world"
1. words = ['try', 'hello', 'world']
2. for문 순회
i = 0, words[0] = 'try'
j = 0, words[0][0] = 't' (j 가 짝수면 대문자로 바꿔줌)
... words[i].length 까지 반복했을때 결과는 'TrY'
result[0] = 'TrY' 가 된다. (result[i] = temp;)
위 과정을 반복하면 result[1] = 'HeLlO' 이고 result[2] = 'WoRlD' 이므로
result 배열은 ['TrY', 'HeLlO', 'WoRlD'] 가 되고
공백을 기준으로 붙여주면 'TrY HeLlO WoRlD' 가 된다.
코딩테스트 풀 때 >>> 히든케이스 <<< 생각하기! 경우의 수를 다양하게 생각해야 한다.
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 정수 제곱근 판별 (0) | 2022.10.04 |
---|---|
[JS] 최소직사각형 (0) | 2022.10.04 |
[JS] 같은 숫자는 싫어 (0) | 2022.10.01 |
[JS] 최대공약수와 최소공배수 (0) | 2022.09.30 |
[JS] 약수의 개수와 덧셈 (0) | 2022.09.29 |