주말에 백신 부스트샷 접종을 했는데 주말내내 아프고 월요일까지 영향이 있어 블로그 글을 한동안 작성하지 못했지만 오늘부터 다시 열심히 기록해야겠다 🤣
nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
function topK(nums, k) {
let obj = {} // (1)
for (i in nums) { // (2)
if (obj[nums[i]]) { // (4)
obj[nums[i]] += 1
} else { // (3)
obj[nums[i]] = 1
}
}
let sortNum = Object.keys(obj).sort((a, b) => {
return obj[b] - obj[a]}) // (5)
return sortNum.slice(0, k).map((num)=> parseInt(num)) // (6)
}
// (1) 우선 빈 배열을 선언해준다
// (2) 상수로 들어온 nums를 기준으로 반복문을 돌려준다 [1, 1, 1, 2, 2, 3]
// (3) 만약 obj의 nums[i]의 값을 가지는 키 값이 존재하지 않는다면, 밸류 값을 1로 설정한다
// (4) 위에서 서술한 키 값이 존재한다면, 그 밸류 값에 1을 더해준다 { '1' : 3, '2' : 2, '1' : 1 }
// (5) 객체의 key값을 배열로 재정렬하는데 기준은 각 키의 밸류값 기준 내림차순으로 정렬한다 ['1', '2', '3']
// (6) 우리는 0번째 인덱스부터 상수 k까지의 값만 필요하기 때문에 그 값만 추출한 뒤 str값을 int값으로 바꿔준다
인자인 height는 숫자로 이루어진 배열입니다. 그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
function getMaxArea(height) {
let area=[] // (1)
let compare = 0 // (2)
for (i = 0; i < height.length; i++) { // (3)
for (j = i+1; j < height.length; j++) {
if (height[i] < height[j]) { // (4)
compare = height[i] * (j - i)
} else { // (5)
compare = height[j] * (j - i)
}
area.push(compare) // (6)
}
}
return Math.max(...area) // (7)
}
// (1) 매 루프마다 구한 넓이 값이 들어올 배열
// (2) 넓이 값을 매번 측정하기 위해 숫자값인 0을 선언
// (3) 상수 height의 length가 곧 가로 길이가 되고, 각각의 값은 높이가 될 것이다.
// 넓이를 구하기위해 들어온 상수의 길이만큼 순회하게 i를 정해주고,
// j는 i보다 1칸 뒤에 있어야하기 때문에 +1을 해준다.
// (4)(5) 높이 값을 정하기 위해선 height[i]와 height[j]중 낮은 값이 기준이 되어야하기 때문에
// 비교해서 낮은 값을 기준으로 높이값을 정하고,
// j - i를 통해 가로 길이 값을 구해 이 두 값을 곱해서 넓이 값을 구한다
// (6) 매 루프마다 구한 넓이 값을 빈 배열에 하나씩 넣어준다
// (7) 그 배열의 값에서 가장 큰 값을 구해준다