reverseString 함수

Luluzoe·2021년 12월 24일
0

문제

문자로 구성된 배열을 input으로 전달하면, 문자를 뒤집어서 return 해주세요.

  • 새로운 배열을 선언하면 안 됩니다.
  • 인자로 받은 배열을 수정해서 만들어주세요.

    Input: ["H", "e", "l", "l", "o"]
    Output: ["o", "l", "l", "e", "h"]

    Input: ["H", "a", "n", "n", "a", "h"]
    Output: ["h", "a", "n", "n", "a", "H"]

어떻게 접근할 것 인가?

뒤집어라는 말에 reverse함수가 떠올랐다.
reverse()를 사용한 코드는 다음과 같다.

const reverseString = s => {
	return s.reverse()
};

test에 통과되었다. 설마 이것을 물어 본 것이었나? 🤔
너무 쉽게 통과되어 다른 방법이 있나 생각해보았다.

  • 먼저 s라는 배열에 역순으로 문자들을 추가해주자.
  • 그리고 기존에 있던 문자들을 삭제해주자.

나의 코드

const reverseString = s => {
   for(let i=0; i<s.length; i++){
    s.unshift(s[i])
     i++;
  }
    s.splice(s.length/2)
    return s
};

for문을 이용하여 배열의 요소에 접근한다.
unshift()를 이용하여 배열의 맨 앞에 순차적으로 문자를 추가해준다.
여기서 주의 할 점은 4번째 줄의 i++이다.

const s = ["H", "e", "l", "l", "o"]
// s라는 배열에 초기값을 할당
// for문을 i=0 까지만 돌렸다고 하면
s.unshift(s[0])
console.log(s) // ["H", "H", "e", "l", "l", "o"]
// "H" 다음 "e"에 접근하려면 i=1이 아니고 i=2로 접근해야 한다.
// 그래서 i++; 추가하여 for문을 돌려준다.

👉 만약 i++를 빼먹는다면 무한루프에 걸리니 조심 할 것.

const reverseString = s => {
   for(let i=0; i<s.length; i++){
    s.unshift(s[i])
     i++;
  }
  return s
};
console.log(reverseString(s))
// [ "o", "l", "l", "e", "H", "H", "e", "l", "l", "o" ]

기존 배열 앞 쪽에 순차적으로 문자열을 추가해주면, 역순으로 문자열이 들어간 것을 확인할 수 있다.
return 하기 전에 s.splice(s.length/2)을 추가하여 배열 길이의 절반을 기점으로 뒷 부분을 잘라내면 된다.

마무리

어떠한 기능을 구현하기위해 코드를 작성할 때, 여러가지 방법이 있다.
물론, 간결하고 이해하기 쉬운 코드가 좋다.
하지만, 이번 시간에는 다른 방법으로 접근함으로써 다른 함수, 다른 메서드를 사용해 볼 수 있었고, 더 생각하였고, 같은 결과를 도출해냈다는 것에 의의를 두려고 한다.

0개의 댓글