프로그래머스, 이상한 문자 만들기(level1)

껌뻑이·2021년 8월 24일
0

Programmers

목록 보기
4/6
post-thumbnail

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

문제

한 개 이상의 단어로 구성되어 있는 문자열 s가 있다.
단어는 공백문자로 구분되어져 있고, 단어의 짝수번째(0포함)는 대문자, 홀수번째는 소문자로 바꾸어서 리턴하는 문제이다.

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

나의 풀이

먼저 문자열로 되어있는 s를 배열로 만들어야 한다.(구분은 공백)

s = s.split(" ");

그 후 나온 단어의 개수(s의 length)를 for문으로 돌리고 또 하나의 단어를 배열로 바꾼 후 그 안에서 i가 2로 나눈 나머지가 0일 때는 대문자(toUpperCase()), 아닐 때는 소문자(toLowerCase())로 바꾸고 다시 문자열로 합쳐(join())주었다.

for (let i = 0; i < s.length; i++) {
  s[i] = s[i].split("");
  for (let j = 0; j < s[i].length; j++) {
    if (j % 2 === 0) s[i][j] = s[i][j].toUpperCase();
    else s[i][j] = s[i][j].toLowerCase();
  }
  s[i] = s[i].join("");
}

여기서 주의해야할 점은 단어를 합칠때는 join("")이지만 단어들을 합칠때는 join(" ")을 해줘야지 원래 s의 형태처럼 나올 수 있다.

코드 줄이기

for문이 s의 길이만큼 반복되는 것을 보아 내장함수를 사용할 수 있을 것처럼 보인다.

return s = s
  .split(" ")
  .map((item) =>
    item
      .split("")
      .map((str, i) => (i % 2 === 0 ? str.toUpperCase() : str.toLowerCase()))
      .join("")
  )
  .join(" ");

0개의 댓글