Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions junghyeon/보석쇼핑.js
Original file line number Diff line number Diff line change
@@ -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;
}
31 changes: 31 additions & 0 deletions junghyeon/징검다리건너기.js
Original file line number Diff line number Diff line change
@@ -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
}