[codekata] 객체

에릭리·2022년 7월 14일
0

TIL

목록 보기
6/8

문제)

풀이) nums=[1,1,1,2,2,3,3,3] 으로 가정

function topK(nums, k) {
  // 여기에 코드를 작성해주세요.
  let obj = {}
  for (let num of nums) {
    if (!obj[num]) obj[num] = 0
    obj[num]++
  }

obj라는 빈 객체를 만들어 주고 거기에 nums 요소를 하나하나 넣으면서 중복되면 +1, 중복되지 않으면 0으로 만든다.
따라서 결과는
obj = { '1': 3, '2': 2, '3': 3 }

function topK(nums, k) {
// 여기에 코드를 작성해주세요.
let hash = {}
for (let num of nums) {
  if (!hash[num]) hash[num] = 0
  hash[num]++
}const hashToArray = Object.entries(obj) 
const sortedArray = hashToArray.sort((a,b) => b[1] - a[1])
  • Object.entries() 는 객체의 키값과 value를 묶은 배열로 바뀌게끔 함
    - hastToArray= [ [ '1', 3 ], [ '2', 2 ], [ '3', 3 ] ]
  • sort를 이용하여 객체의 value값들중 큰 순서대로 나오게끔 만든다.
    - sortedArray = [[ '1', 3 ], [ '3', 3 ], [ '2', 2 ] ]
function topKFrequent(nums, k) {
    let hash = {}

    for (let num of nums) {
        if (!hash[num]) hash[num] = 0
        hash[num]++
    }

    const hashToArray = Object.entries(hash)
    const sortedArray = hashToArray.sort((a,b) => b[1] - a[1])
    const sortedElements = sortedArray.map(num => parseInt(num[0]))
    return sortedElements.slice(0, k)
  • map함수로 num[0], 즉 객체의 value 요소만으로 이루어진 배열을 만들고 그 배열을 int로 바꿔주기 위해 parseInt를 쓴다.

    -sortedElements = [1, 3, 2]

  • 마지막으로 slice(0,k)로 0부터 k까지의 값들만 리턴되게 함

느낀점)

너무 어렵다.. 구글링(답안지) 없이 혼자 풀 수준까지 가려면 아직도 한참은 남은것 같다. 답안지를 봐도 해석하는데 시간을 쏟아 부어야하지만 주저 앉지말고 잘 하자.

0개의 댓글