\(@^0^@)/
[알고리즘] leetcode - Reverse Words in a String III 본문
Reverse Words in a String III
Input: s = "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"
Input: s = "God Ding"
Output: "doG gniD"
어려운 문제는 아닌데 지난번에 풀지 못하여서 오늘 재도전하였다.
살짝 야매?로 푼 것 같긴 한데... 그래도 제출되었으니 성공 :)
내가 푼 코드는 이렇다.
var reverseWords = function(s) {
if(s === "") return -1
let splited = s.split(" ")
let result = [];
let store;
for(let i = 0; i < splited.length; i++) {
store = splited[i].split("")
store = store.reverse()
store = store.join("")
if(i !== splited.length-1) store += " "
result += store
}
return result
};
1. 해당 문장을 split 하고, 그 안에서 단어들끼리 또 split 하였고,
2. reverse를 이용하여 공백 기준으로 하나의 음절을 reverse 하여 [ 'G', 'o', 'd']가 [ 'd', 'o', 'G']이 되도록 하였음.
3. 그다음, join 메서드로 쉼표와 배열을 제거하여 'doG'로 만들었다.
그렇게 해주고, 콘솔에 찍어보니 내가 예상한 것과는 다르게 모든 단어들이 붙어있는 사태 발생!
"s'teLekatedoCteeLtsetnoc"
그래서 결국 조건문 하드코딩으로 한 음절마다 공백을 넣어주고, 마지막 부분에는 안 넣는 방법으로 해결하였음.
다른 사람의 설루션 코드 감상
var reverseWords = function (s) {
if (s === "") {
return -1;
}
let result;
result = s.split(" ");
for (let i = 0; i < result.length; i++) {
result[i] = result[i].split("").reverse().join("");
}
return result.join(" ");
};
메서드도 동일하고 접근도 비슷하게 하였는데, 훨씬 간결하고 가독성이 좋은 코드이다.
split 한 result 배열에 반복문을 돌려서 각각 할당해주니깐, 변수도 여러 개가 필요 없고 깔끔하구나...
마지막에 join 메서드로 스트링으로만 변환해주면 끝.
result 배열 안에 각각 할당해줄 생각을 못하고, 또 다른 변수를 하나 생성해서 그 안에 집어넣으니까
코드도 복잡해지고, 가독성도 떨어진다는 것을 배웠음. 역시 많이 아는 사람이 이기는 거다.
다음번에 이런 식의 유형이 나온다면, 알게 된 방법으로 적용해보자!
https://leetcode.com/explore/learn/card/array-and-string/204/conclusion/1165/
'알고리즘' 카테고리의 다른 글
[알고리즘] Binary Heaps (0) | 2023.01.26 |
---|---|
[알고리즘] leetcode - Pascal's Triangle II (0) | 2022.07.03 |
[알고리즘] leetcode - rotate array (0) | 2022.07.02 |
[알고리즘] 재귀를 사용한 stringifyNumbers (0) | 2022.06.22 |
[알고리즘] 스택(Stack)과 구현 메서드 (0) | 2022.05.09 |