whatisthis?

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

ALGORITHM/PROGRAMMERS

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

thisisyjin 2022. 7. 6. 17:31

javascript

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 조건

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

예시

입출력 예

s                        return
"try hello world"        "TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다.
각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다.
따라서 "TrY HeLlO WoRlD" 를 리턴합니다.


내가 작성한 코드

function solution(s) {
    let ans = '';
    const arr = s.split(' ').map(x => x.split('')); 
    for (let i=0; i<arr.length; i++) {
        ans += arr[i].map((val, ind) => ind % 2 === 0 ? val.toUpperCase() : val.toLowerCase()).join('') + ' ';
    }
  return ans.trim();
}
  1. 먼저 s를 split(' ')으로 각 단어를 요소로 갖는 배열을 만든 후, map 메서드로 split('') 각 글자를 배열로 나눈다.

-> arr는 [['t','r','y'],['h','e','l','l','o'],['w','o','r','l','d']] 가 된다.

  1. arr.length 만큼(위의 예시에서는 3이다) for 반복문을 실행한다.

-> 짝수인 문자는 대문자로, 홀수인 문자는 소문자로 해주기 위해 map 메서드 사용 후 join('') 으로 합쳐준다.

  1. 단어마다 끝에 띄어쓰기를 붙여준다.
  2. 마지막 띄어쓰기는 불필요하므로 trim()으로 없애준다.

콘솔은 통과했지만 실행해보니 몇개 테스트에서 실패하였다.
아마도 마지막에 ' '를 붙인 것이 문제인가 싶어서 다시 작성해봤다.

다시 작성한 코드

function solution(s) {
      let answer = [];
    const arr = s.split(' ').map(x => x.split('')); 
    for (let i = 0; i < arr.length; i++) {
      answer.push(arr[i].map((val, ind) => ind % 2 === 0 ? val.toUpperCase() : val.toLowerCase()).join(''));
    }
  return answer.join(" ");
}

공백이 하나 이상인 경우가 있으므로 우선 answer 배열에 각 문자열을 push한 후, join(" ")로 각 단어별로 띄어쓰기를 해주면 된다.

실행 결과

테스트 1 〉    통과 (5.45ms, 30.4MB)
테스트 2 〉    통과 (4.76ms, 30.2MB)
테스트 3 〉    통과 (7.62ms, 30.4MB)
테스트 4 〉    통과 (9.93ms, 30.4MB)
테스트 5 〉    통과 (6.25ms, 30.4MB)
테스트 6 〉    통과 (4.93ms, 30.2MB)
테스트 7 〉    통과 (4.98ms, 30.1MB)
테스트 8 〉    통과 (8.33ms, 30.3MB)
테스트 9 〉    통과 (6.23ms, 30.4MB)
테스트 10 〉    통과 (9.67ms, 30.5MB)
테스트 11 〉    통과 (6.73ms, 30.3MB)
테스트 12 〉    통과 (6.46ms, 30.2MB)
테스트 13 〉    통과 (5.13ms, 30.1MB)
테스트 14 〉    통과 (4.81ms, 30.3MB)
테스트 15 〉    통과 (5.22ms, 30.3MB)
테스트 16 〉    통과 (5.70ms, 30.4MB)