\(@^0^@)/

[알고리즘] leetcode - Reverse Words in a String III 본문

알고리즘

[알고리즘] leetcode - Reverse Words in a String III

minjuuu 2022. 7. 4. 11:49
728x90

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/

 

Explore - LeetCode

LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.

leetcode.com

 

728x90