[프로그래머스] "이상한 문자 만들기": JS - toUpperCase()

신혜린·2023년 4월 26일
0

알고리즘(javascript)

목록 보기
11/21
post-thumbnail

내가 작성한 코드

function solution(s) {
    let array = s.split(" ");
    let words = [];
    
    for (i = 0; i < array.length; i++) {
        words.push(array[i].split(""));
    }
    
    for (i = 0; i < array.length; i++) {
        for (j = 0; j < words[i].length; j += 2) {
            words[i][j] = words[i][j].toUpperCase();      
        };
        words[i] = words[i].join("");
    };
    
    return words.join(" ");
};

위와 같이 작성했더니 한 문제를 제외한 모든 문제에 오류가 (...) ㅠㅠ

내가 의도한 바는 다음과 같다.

let array = s.split(" ");

: 공백을 기준으로 문자열을 분리하여 배열로 저장

for (i = 0; i < array.length; i++) {
        words.push(array[i].split(""));
    }

: 배열로 담아준 단어들을 각각 분리하여 words라는 배열에 새로 푸시

 for (i = 0; i < array.length; i++) {
        for (j = 0; j < words[i].length; j += 2) {
            words[i][j] = words[i][j].toUpperCase();      
        };
        words[i] = words[i].join("");
    };
  
    return words.join(" ");

: 배열 안의 배열 구조이기 때문에 하나씩 뜯어서 0번째부터 짝수번째 인덱스만 대문자로 변환하여 덮어주고 반환한 뒤 join함수로 합쳐보고자 함

근데 사실 쓰면서도 너무 어지러워서 이게 맞나.. 어디서 문제가 된 걸까 가늠이 잘 잡히지 않았다.

수정한 코드

function solution(s) {
 let words = s.split(" "); // 문자열을 공백을 기준으로 분리하여 단어 배열에 저장
 let answer = [];

 for (let i = 0; i < words.length; i++) {
   let word = "";
   for (let j = 0; j < words[i].length; j++) {
     // 짝수 인덱스일 때 대문자로 변환, 홀수 인덱스일 때 소문자로 변환
     if (j % 2 === 0) {
       word += words[i][j].toUpperCase();
     } else {
       word += words[i][j].toLowerCase();
     }
   }
   answer.push(word); // 변환한 단어를 배열에 추가
 }

 return answer.join(" "); // 배열을 공백을 기준으로 이어붙여 문자열로 반환
}

word라는 새로운 빈 문자열을 생성해서 word += word[i][j].toUpperCase() 등을 사용해 추가하는 게 인상 깊은 코드였다. 숫자로만 += 해봤지, 문자열을 이런 방식을 이용하여 추가하는 것은 한번도 시도해본 적 없기 때문에 신선했다!

profile
개 발자국 🐾

0개의 댓글