프로그래머스[이상한 문자 만들기]

이유정·2022년 9월 28일
0
post-thumbnail

문제 설명
문자열 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]의 인덱스를 가진다!!!

  1. 알았어도, 빈 객체에 새롭게 하나의 char를 넣어주는 과정에서 띄어쓰기를 어떻게 넣어야 하는가 모르겠었다. [i]와 그에 해당하는 모든[j]의 과정이 하나 끝날때 띄어쓰기를 넣어주면 된다.
    이건 코드를 보면서 알아서 생각해라

결국,,, 성공한 코드!!

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
    }
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글