요새 javascript 알고리즘 문제 풀고 있는 사이트에서 문제가 올라왔는데
min 값과 max 값의 사이를 오가는 숫자를 구하는 문제였다
unity 에선 Mathf.PingPong(float, length) 함수로 쉽게 구할 수 있었는데 js에서는.. 아마 없는듯?
오르는 중인지 내려가는 중인지 bool 값으로 할 수 있었는데 그냥 구현해보고 싶었다
// value 를 넣으면 min, max 값을 오가는 값을 리턴 하는 함수
const pingpong = (min,max, value) => {
// 0을 기준으로 값을 맞춰준다
const normalizeMin = 0;
const normalizeMax = max - min;
const normalizeVal = value - min;
// 값 차이를 2배 해준다
const max2 = (normalizeMax - normalizeMin) * 2;
// 현재 들어온 값을 위에서 구한 max2 값의 나머지 계산을 해준다
// 즉 현재 값이 max 보다 큰지 작은지 알 수 있게 해준다
const overVal = normalizeVal % max2;
// overVal 값이 Max 값 보다
// 작은 경우(숫자가 커지는 경우) ? 정규화 전 min 값 + overVal 한다
// 큰 경우 (숫자가 작아지는 경우) : 정규화max 보다 초과한 수를 max 에서 빼준다
return overVal <= normalizeMax
? min + overVal
: max + (normalizeMax - overVal)
}
확인
'Frontend > Javascript' 카테고리의 다른 글
[Javascipt] Blob, File 을 Base64 로 컨버팅 (8) | 2021.03.29 |
---|---|
[Javascript] bool 값으로 정렬하기 (19) | 2021.03.29 |
[Javascript] Switch 문 안에서 const, let (17) | 2021.03.02 |
[Javascript] {(intermediate value)} is not a function (19) | 2021.02.04 |
[Javascript] input file 으로 비디오를 가져와 재생 (12) | 2020.04.14 |