diff --git "a/junghyeon/\353\263\264\354\204\235\354\207\274\355\225\221.js" "b/junghyeon/\353\263\264\354\204\235\354\207\274\355\225\221.js" new file mode 100644 index 0000000..74d0903 --- /dev/null +++ "b/junghyeon/\353\263\264\354\204\235\354\207\274\355\225\221.js" @@ -0,0 +1,30 @@ +function solution(gems) { + let answer = [1, gems.length]; + let left = 0, right = 0; + let target = new Set(gems).size + const map = new Map() + map.set(gems[0], 1) + + //right이 범위를 초과할 때까지 반복 + while(right < gems.length) { + if(target == map.size) { + // 1. left++ (빈도수-1, 빈도수 0이 되면 Map에서 삭제) + // 2. right - left가 answer 보다 더 짧은 구간이라면 answer에 재할당 + if(right - left < answer[1] - answer[0]) { + answer[0] = left +1; + answer[1] = right+1; + } + map.set(gems[left], map.get(gems[left]) - 1) + if(map.get(gems[left]) == 0) { + map.delete(gems[left]) + } + left++; + } else { + // 조건이 만족될 때까지 right++ (빈도수 +1) + right++; + map.set(gems[right], map.get(gems[right]) ? map.get(gems[right]) +1 : 1) + } + } + + return answer; +} diff --git "a/junghyeon/\354\247\225\352\262\200\353\213\244\353\246\254\352\261\264\353\204\210\352\270\260.js" "b/junghyeon/\354\247\225\352\262\200\353\213\244\353\246\254\352\261\264\353\204\210\352\270\260.js" new file mode 100644 index 0000000..ff2a2e9 --- /dev/null +++ "b/junghyeon/\354\247\225\352\262\200\353\213\244\353\246\254\352\261\264\353\204\210\352\270\260.js" @@ -0,0 +1,31 @@ +const isCross = (stones, mid, k) => { + let count = 0; + + for(const stone of stones) { + if(stone-mid <= 0) { + count++; + if(count === k) return false + } else { + count =0; + } + } + return true +} + + +function solution(stones, k) { + let min = 1 + let max = 200000000 + console.log(min, max) + while (min <= max) { + let mid = Math.floor((min + max) / 2) + if(isCross(stones, mid, k)) { + min = mid + 1 + console.log("min",min) + } else { + max = mid -1 + console.log("max",max) + } + } + return min +}