알고리즘-2021/04/17

sanghun Lee·2021년 4월 17일
0

알고리즘

목록 보기
24/52
post-thumbnail

문제 설명

문자열 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) {
  //일단 split("")해서 문자가 들어간 배열로 만들자
  //count변수를 이용해서 공백일때는 더하지 말자
  //count변수를 이용해서 홀짝 여부를 판단해서 toLowerCase, toUpperCase메서드를 사용하자
    let answer = '';
    let strArr = s.split("");
    let count = 0;
    for(let i = 0; i < strArr.length; i++){
      // if(strArr[i].charCodeAt(0) === 32){
      //     console.log(strArr[i].charCodeAt(0))
      // }
      if(strArr[i] !== " "){
        count = i;
        if((count) % 2 === 1){
          //홀수인 경우 소문자
          strArr[count] = strArr[count].toLowerCase();
          console.log(`? : ${strArr[count]}`)
        }
        if((count) % 2 === 0){
                    strArr[count] = strArr[count].toUpperCase();
          console.log(`! : ${strArr[count]}`)
          //짝수인 경우 대문자
        }
        count += 1;
      }

    }
    answer = strArr.join("");    
    return answer;
}

처음에는 문제를 잘못 이해하여 공백을 제외한 전체길이에서의 각 문자의 홀짝을 따지는 문제인 줄 알았다.

그래서 위와 같이 풀었고 큰 문제가 없겠거니 생각하고 돌렸으나 실패


두번째 풀이

  function solution(s: string): string {
    //각 단어의 짝 홀을 나누는거네 .. ㅂㄷㅂㄷ
    //각 단어 별로 짝홀 나뉘어서 돌리고
    //쟤네를 다시 붙여넣는 작업을 해야함
    let stringArr = s.split(" ");

    let newArr: string[][] = stringArr.map(function (element) {
      return element.split("").map(function (el, idx) {
        return idx % 2 !== 0 ? el.toLowerCase() : el.toUpperCase();
      });
    });
    let newFormArr: string[] = [];
    newFormArr = newArr.map((el) => el.join(""));

    return newFormArr.join(" ");
  }

분노가 느껴지는 주석이다

'각' 문자의 홀짝을 나눠서 풀어야한다. 그래서 결국.. 빨리 풀자는 마음에 이중반복문이 나왔다.
시간복잡도를 고려한 풀이는 언제쯤 짤까싶긴하지만 ..
다른 좋은방식이 있을 것 같긴한데 아마도 첫번째 방식에서 카운트만 잘 조절해주면 복잡도가 해결 될 것 같다.

여튼 끝!


참고


+

개인 깃허브에 올릴때 ts파일로 옮기고 있는데 일부 타입 미스가 있어서 새로운 newFormArr로 옮겨주는 작업으로 수정했다.

기존에는 newArr에 그대로 다시 할당을 해버리는 로직을 작성했는데 생각해보니 string[][] 에서 string[]를 할당하는 것이니 올바르지 않다고 판단됬다


profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글