일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Recoil
- adb pair
- github pdf
- ffi-napi
- react-native
- nextjs
- vercel git lfs
- camera access
- Each child in a list should have a unique "key" prop.
- adb connect
- ELECTRON
- npm package
- Failed to compiled
- silent printing
- camera permission
- Can't resolve
- custom printing
- Git
- react-native-dotenv
- device in use
- rolldown
- 이미지 데이터 타입
- dvh
- github 100mb
- github lfs
- animation
- 티스토리 성능
- augmentedDevice
- html
- electron-packager
- Today
- Total
Bleeding edge
[LeetCode] 2288. Apply Discount to Prices - 자바스크립트 0623 본문
https://leetcode.com/problems/apply-discount-to-prices/
Apply Discount to Prices - 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.주어진 sentence를 " "로 분리합니다. 잘보면 $12a 이런 문자는 나눌 수 없는 것을 볼 수 있습니다. 즉 $숫자 단위로 끊긴 것을 확인해야 하기 때문에, " "를 기준으로 split 해야합니다
const list = sentence.split(" ")
2. 1에서 구한 list를 기준으로 for문을 작성합니다
for (let i = 0; i < list.length; i++) {
}
3. list[i]가 문제에서 이야기한 케이스인 경우에 discount를 적용해서 풉니다.
3-1 조건1, 앞글자가 $로 시작할 것
const condition1 = (list[i][0] === "$")
3-2 조건2 $뒷글자가 숫자일 것
const condition2 = (parseFloat(list[i].slice(1)) + "" === list[i].slice(1))
3-2 조건을 세우는데 거의 30분정도 쓴거같다.. 2번 조건을 isNaN을 사용한다던가, regex로 풀이를 하다보면 1e5 혹은 1xd와 같은 숫자 아닌 숫자같은 친구들 같은 경우에도 숫자로 취급하기 떄문에 너무 조건을 세우기 힘들었다. 계속 식을 세워본 결과 parseFloat을 문자로 만들고 변화가 없다면, 조건 2단계를 통과한 것으로 본다.(이렇게하면 1e5같은경우에는, 10000가 될 것이고 1xd같은경우 10진수로 변환되어 나올 것이다)
4. 조건1 조건2를 통과한다면, 할인을 적용하고 $와 더한다
if (condition1 && condition2) {
let number = (Number(list[i].slice(1)) * (1 - discount / 100)).toFixed(2)
list[i] = "$" + number
}
5. list를 join하고 더한다
return list.join(" ")
전체 풀이
var discountPrices = function (sentence, discount) {
const list = sentence.split(" ")
for (let i = 0; i < list.length; i++) {
const condition1 = (list[i][0] === "$")
const condition2 = (parseFloat(list[i].slice(1)) + "" === list[i].slice(1))
if (condition1 && condition2) {
let number = (Number(list[i].slice(1)) * (1 - discount / 100)).toFixed(2)
list[i] = "$" + number
}
}
return list.join(" ")
};
최근에 풀었던 미디엄 문제중 가장 ;ㅁ; 고생해서 푼 문제같다.. 숫자로 변환되는 범위에 대해 생각해볼 수 있었다.
'코딩테스트 공부' 카테고리의 다른 글
[LeetCode] 2269. Find the K-Beauty of a Number - 자바스크립트 0624 (0) | 2022.06.24 |
---|---|
[LeetCode] 1051. Height Checker - 자바스크립트 0624 (0) | 2022.06.24 |
[LeetCode] 338. Counting Bits - 자바스크립트 - 0623 (0) | 2022.06.23 |
[LeetCode] 2126. Destroying Asteroids - 자바스크립트 0621 (0) | 2022.06.21 |
[LeetCode] 2053. Kth Distinct String in an Array - 자바스크립트 0621 (0) | 2022.06.21 |