문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"
function solution(s) {
// 문자열 s을 받아서
// 그 문자열을 split 으로 나눠 그러면 배열 값으로 나오잖아. (띄어쓰기도 자기 하나의 인덱스를 ㄹ차지하고 있음 )
// 돌아가면서 인덱스가 0부터 짝수인 애들만 대문자로 바꿔준 값을 새로운 배열에 넣어준다.
// toUpperCase() 이걸 이용한다.
// 마지막에 join('')으로 합쳐준다.(이미 띄어쓰기가 배열 때도 하나의 자리를 차지하고 있기때문에 )
let arr = s.split('')
let newArr = []
for(let i =0; i<arr.length; i++){
if(i%2 === 0){
newArr.push(arr[i].toUpperCase())
}else{
newArr.push(arr[i])
}
}
return newArr.join('')
}
이렇게 문자를 넣어보면 잘 출력 되는데 문제를 틀렸다고 한다.
오래 걸려서 그런가?
solution("try hello world")
'TrY HeLlO WoRlD'
solution('hellobroth er every body')
'HeLlObRoTh eR EvErY BoDy'
그래서,,? 내 나름대로 짱구를 굴려서
짝수만 for문으로 돌리고
홀수 인덱스는 + 1을 해줬는데 문제 통과가 안된다... 출력은 제대로 되는데?
function solution(s) {
let arr = s.split('')
let newArr = []
for(let i =0; i<arr.length; i+=2){
newArr.push(arr[i].toUpperCase())
newArr.push(arr[i+1])
}
return newArr.join('')
}
그래서 더 짱구를 굴려서 그냥 arr 그 자체에 값을 재할당 해주는 느낌으로 해봤는데 안됐다.
function solution(s) {
let arr = s.split('')
for(let i =0; i<arr.length; i+=2){
arr[i] = (arr[i].toUpperCase())
arr[i+1] = arr[i+1]
}
return arr.join('')
}
이정도면 남의 풀이 봐봐도 되잖아?
....
알고보니,,,
시간문제가 아니였다!!
정말 내가 코드를 잘못 짠거였는데
그 이유는
1. 문제를 안읽어서 내 맘대로, 띄어쓰기까지 하나의 인덱스를 차지한다고 생각했다.
예를들어, hi everybody 띄어쓰기까지 포함하면 앞의 e는 [3]인덱스를 가지는데,
띄어쓰기를 포함하지 않고 단어 기준으로 앞의 e는 [0]의 인덱스를 가진다!!!
결국,,, 성공한 코드!!
function solution(s) {
let arr = s.split(' ')
let newArr = ''
for(let i =0; i<arr.length; i++){ // 단어별로 나눈것
for(let j = 0; j<arr[i].length; j++){
if(j%2 === 0){
newArr = newArr + arr[i][j].toUpperCase()
}else{
newArr = newArr + arr[i][j].toLowerCase()
}
}
if(i < arr.length-1){
newArr = newArr + ' '
}
}
return newArr
}