카테고리 없음

[LeetCode]1544. Make The String Great - 자바스크립트 0609

codevil 2022. 6. 9. 11:52

https://leetcode.com/problems/make-the-string-great/

 

Make The String Great - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이 문제에서 이렇게 애를 먹을 줄은 몰랐는데.. 애를 먹었다. 우선 이 문제의 예시에는 없지만 주의 해야할 케이스는,

1. 대문자가 앞에나오고 뒤에 소문자가 나오는경우

2. 대문자 소문자 소멸 뒤, 새로운 대문자 소문자 조합이 나오는 경우

이 두가지에 대해서 신경을 써야한다. 1번같은 경우는 그냥 문제를 제대로 읽었다면 그냥 신경 쓸수 있는 케이스이지만, 2번같은경우에는 체크하고있는 index에 신경을 써야한다.

문제풀이

1. 대문자 소문자 구분방법

s[i].charCodeAt()을 활용하여 a, A,z,Z를 각각 구하여 대문자 소문자 범위를 구한다. console.log로 구했다 대문자 같은경우 65에서 90이 범위이다

            const cca = s[i].charCodeAt()
            if (cca >= 65 && cca <= 90) {
            }

2. 대문자가 앞에 있는경우, 대문자가 뒤에 있는경우

                if (s[i].toLowerCase() === s[i - 1]) {
                } else if (s[i].toLowerCase() === s[i + 1]) {
                }

3. 그 문자들을 삭제

                if (s[i].toLowerCase() === s[i - 1]) {
                    s = s.slice(0, i - 1) + s.slice(i + 1)
                    i -= 3
                } else if (s[i].toLowerCase() === s[i + 1]) {
                    s = s.slice(0, i) + s.slice(i + 2)
                    i -= 2
                }

i를 3 그리고 2를 빼준 이유는, 문자를 삭제하면서 새로운 삭제 가능성이 있는 문자가 있는지 검색을 하기 위해서이다. 하지만, 이렇게 실행하면 어떤 문자같은 경우에는 index에 undefined가 발생하여 에러가 발생할 수 있다. 이 에러가 발생하는 조건은 i가 0보다 작을 때이기 때문에, for문 안에 거대한 조건을 넣어준다

        if (i >= 0) {
        }

전체 풀이식

var makeGood = function (s) {
    for (let i = 0; i < s.length; i++) {
        if (i >= 0) {
                const cca = s[i].charCodeAt()
                if (cca >= 65 && cca <= 90) {
                if (s[i].toLowerCase() === s[i - 1]) {
                    s = s.slice(0, i - 1) + s.slice(i + 1)
                    i -= 3
                } else if (s[i].toLowerCase() === s[i + 1]) {
                    s = s.slice(0, i) + s.slice(i + 2)
                    i -= 2
                }
            }
        }
    }
    return s
};

사실 인덱스에서 문제가 생기는 경우는 상당히 많이 만난 이슈인데 항상 해결 방법을 몰라서 i의 범위를 잡느라 쩔쩔 맨경우가 있었는데, 이와 같이 i를 조건을 걸어버리면 된다는 아이디어를 얻게되었다!