일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- adb pair
- adb connect
- camera permission
- npm package
- html
- vercel git lfs
- Each child in a list should have a unique "key" prop.
- react-native-dotenv
- 이미지 데이터 타입
- Recoil
- github pdf
- react-native
- electron-packager
- camera access
- Can't resolve
- github lfs
- Failed to compiled
- github 100mb
- dvh
- device in use
- custom printing
- animation
- Git
- nextjs
- 티스토리 성능
- ELECTRON
- ffi-napi
- augmentedDevice
- rolldown
- silent printing
- Today
- Total
Bleeding edge
[LeetCode] 2293. Min Max Game - 자바스크립트 0610 본문
https://leetcode.com/problems/min-max-game/
처음에 억.. 어떻게하지? 하고 단순한데 뭔가 짜야할 방향이 보이지 않아 순간 멘붕을 했었다. 하지만, 차분하게 문제를 보니 문제를 푸는 방법이 생각났다.
1. nums의 length가 1이 나올 때까지 계속 내용물을 줄여야했다.
2. 내용물을 줄이는 loop문은 두가지가 존재해야했다.
2-1 index 0부터 끝까지, min, max, min, max 순으로 계산하되, index의 두개의 값은 1개로 바꾸어주는 loop
(2-1에대한 설명이 너무 복잡해서 추가 설명을 더 하자면, [1,2,3,4]가 있다고하면 1,2를 1로, 3,4를 4로 바꾸어서 [1,4]로 바꾸어주는 루프를 이야기한 것이다)
2-2 2-1을 1번처럼 length가 1이 될때까지 계속 루프를 돌려주는 루프
우선 while문으로 먼저 시작했다.
while (nums.length !== 1) {
}
while문을 넣으면 [3]과 같은 Boudnary Condition이 모두 해결된다.
1. 그리고, for 문을 넣는다. for 문은 nums의 index에 따라서, 1개씩 증가한다.
2. 그리고 min, max 순환을 위해서, checker = true라는 변수를 만든다. (다음번에는 isMin 이라는 변수를 사용해야겠다)
let checker = true
for (let i = 0; i < nums.length; i++) {
}
이때 loop문에 필요한 변수가 하나 더 필요하기에
1. calc라는 변수를 만들고,
2. checker의 값에 따라서 min 혹은 max를 넣고 calc를 계산한다.
3.그리고 checker 값을 바꾸어준다
for (let i = 0; i < nums.length; i++) {
let calc
if (checker === true) {
calc = Math.min(nums[i], nums[i + 1])
} else {
calc = Math.max(nums[i], nums[i + 1])
}
checker = !checker
}
while문의 탈출을 위해서 그리고, min, max를 반영하기 위해서 nums를 슬라이스해서 넣는다.
for (let i = 0; i < nums.length; i++) {
let calc
if (checker === true) {
calc = Math.min(nums[i], nums[i + 1])
} else {
calc = Math.max(nums[i], nums[i + 1])
}
checker = !checker
nums = [...nums.slice(0, i), calc, ...nums.slice(i + 2)]
}
전체 코드
var minMaxGame = function (nums) {
while (nums.length !== 1) {
let checker = true
for (let i = 0; i < nums.length; i++) {
let calc
if (checker === true) {
calc = Math.min(nums[i], nums[i + 1])
} else {
calc = Math.max(nums[i], nums[i + 1])
}
checker = !checker
nums = [...nums.slice(0, i), calc, ...nums.slice(i + 2)]
}
}
return nums
};
문제는 풀고나니 별거 없었지만, 뭔가 손이 너무 안가는 문제였다. 이상한 공포가 느껴졌다고해야하나.. 리트코드 UI가 익숙하지 않아서그런가.. 손이 잘안가지만, 손을 자주 대는 연습을 해야겠다.
'코딩테스트 공부' 카테고리의 다른 글
[LeetCode] 2295. Replace Elements in an Array - 자바스크립트 0610 (0) | 2022.06.10 |
---|---|
[LeetCode] 2287. Rearrange Characters to Make Target String - 자바스크립트 0610 (0) | 2022.06.10 |
[LeetCode] 43. Multiply Strings - 자바스크립트 0609 (0) | 2022.06.09 |
[LeetCode]796. Rotate String - 자바스크립트 0609 (0) | 2022.06.09 |
[leetcode] 34. Find First and Last Position of Element in Sorted Array - 자바스크립트 0607 (0) | 2022.06.07 |