Algorithm - 이상한 문자 만들기

Sangho Moon·2020년 12월 28일
0

Algorithm

목록 보기
25/37
post-thumbnail
post-custom-banner

프로그래머스 Lv.1

문제 설명

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

제한 사항

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

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

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


나의 풀이

1 번 째 시도

function solution(s) {
    const arr = s.split("");

    const newArr = arr.map((el, index) => {
      if (index % 2 === 0) {
        return el.toUpperCase();
      } else if (index % 2 !== 0) {
        return el.toLowerCase();
      }
    });

    return newArr.join('');
}
  1. 문자열 s를 매개변수로 받아 arr라는 상수에 split 메서드로 배열을 생성
  2. newArr 라는 상수에 arr 상수를 map으로 돌려서 만약 index가 짝수이면 해당 요소를 대문자,
    index가 짝수가 아니라면 소문자로 처리.
  3. 최종적으로는 newArr라는 배열을 join 메서드를 이용해 string화 시켜서 리턴.

그런데 콘솔로 확인해 보았을 때는 예상대로 잘 나왔으나 제출 후 채점을 해보았더니 오답...

문제가 뭘까 생각하다가 문제를 다시 찬찬히 읽어보았다.

그런데 제한 사항의 첫 번 째 문장을 보니..

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

여기서 공백이 있을 때마다 인덱스를 초기화해야 한다는 뜻으로 해석했다.

그렇다면 split 메서드로 배열을 만드는 방식이 아니라 빈 문자열에 하나하나 추가해 나가야 하나? ->

배열을 쓰지 않는다 ? -> map을 쓰지 못한다 ? -> For 문을 써야겠다라는 의식의 흐름으로 다시 작성해 보았다.


2 번째 시도

function solution(s) {
    let index = 0;
    let result = ''; 
  
    for (let i = 0; i < s.length; i++) {
        if (s[i] === ' ') {
            result += ' ';
            index = 0;
        } else {
            index % 2 === 0 ?  result += s[i].toUpperCase() : result += s[i].toLowerCase();
            index++;
        }
    }
  
    return result;
}
  1. index 라는 변수를 0으로 할당해준다.
  2. result 라는 변수를 공백의 값으로 할당해준다.
  3. for 문을 돌려서 s[i]가 공백이라면 result 변수에 공백을 추가해주고, index를 0으로 할당한다.
  4. 만약 s[i]가 공백이 아니라면, 삼항 연산자로 현재 index의 짝수, 홀수를 구분하여 대, 소문자를 구분하고 result라는 변수에 해당 string을 추가시킨다.
  5. 그리고 index를 1 증가시킨다.
  6. 최종적으로 result라는 변수를 출력한다.
profile
Front-end developer
post-custom-banner

0개의 댓글