일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- adb pair
- 이미지 데이터 타입
- github pdf
- rolldown
- github lfs
- camera access
- Each child in a list should have a unique "key" prop.
- npm package
- adb connect
- ffi-napi
- react-native
- Recoil
- vercel git lfs
- custom printing
- augmentedDevice
- electron-packager
- animation
- Can't resolve
- camera permission
- nextjs
- react-native-dotenv
- 티스토리 성능
- github 100mb
- dvh
- silent printing
- html
- device in use
- ELECTRON
- Failed to compiled
- Git
- Today
- Total
Bleeding edge
[LeetCode]1544. Make The String Great - 자바스크립트 0609 본문
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를 조건을 걸어버리면 된다는 아이디어를 얻게되었다!