문자로 구성된 배열을 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에 통과되었다. 설마 이것을 물어 본 것이었나? 🤔
너무 쉽게 통과되어 다른 방법이 있나 생각해보았다.
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)
을 추가하여 배열 길이의 절반을 기점으로 뒷 부분을 잘라내면 된다.
어떠한 기능을 구현하기위해 코드를 작성할 때, 여러가지 방법이 있다.
물론, 간결하고 이해하기 쉬운 코드가 좋다.
하지만, 이번 시간에는 다른 방법으로 접근함으로써 다른 함수, 다른 메서드를 사용해 볼 수 있었고, 더 생각하였고, 같은 결과를 도출해냈다는 것에 의의를 두려고 한다.