기술 블로그

[TIL] 객체에 정렬 곁들이기 본문

프론트엔드/Javascript

[TIL] 객체에 정렬 곁들이기

jaegwan 2023. 11. 9. 13:00
반응형
코딩테스트 문제 복기


문제 조건

  1. 배열로 아이템이 제공된다.
  2. 각 아이템은 name, score 쌍의 데이터를 가진다.
  3. score을 기준으로 들어온 아이템을 정렬해야한다.
    1. score, 들어온 순으로 우선순위를 가진다.
    2. 만약 같은 name으로 기존보다 더 높은 score가 들어온다면 업데이트한다.
  4. score순으로 정렬되었을때 특정 갯수(이하 K) 안에서 순위에 변동(순위에 영향을 끼치지 못하는 정도의 score변동은 미해당)이 있을 때 count를 +1 한다.
  5. 알맞은 count를 반환하시오

분석

위 문제에 대해 주요 포인트는 2가지 이다.

  1.  중복된 name값을 가진 아이템은 업데이트 할것
  2.  score값에 따라 정렬할 것 
  3.  이전 값과 비교하여 변화를 count 할것

 

3번의 경우에는 최신 업데이트한 rank값과 직전 rank값인 lastRank값을 비교하여 K이내로 순위 변동이 있을 시 카운트했다. 

데자뷰

 

문제는 1번과 2번이였다. 처음에는 2번을 보고 객체배열로 생성을 했으나 1번의 구현이 복잡해졌다.

코테 당시 코드를 갈아엎고 다시 객체로 구현해서 1번에 수월하게 개발했고. 

 

2번 조건을 해결하기 위해 Object메서드를 통해 정렬 했다.

rank = Object.entries(rank).sort(([,a],[,b]) => b - a)
        .reduce((r,[k,v])=> ({...r,[k]:v}),{})

 

1. 객체를 배열로 바꾸기

Object.entries(rank)

 

2. 값을 기준으로 배열 정렬하기

sort(([,a],[,b])=>b-a) // 구조분해 할당을 이용해 두번째인 값만 추출한 모습

 

3.다시 배열로 만들기

reduce((r,[k,v])=>({...r,[k]:v}),{})

반응형

'프론트엔드 > Javascript' 카테고리의 다른 글

2제곱수 확인  (0) 2023.11.20
[TIL] 클로저  (0) 2023.11.06
[TIL] 깊은 복사  (0) 2023.10.23
[TIL]꼬리 재귀  (0) 2023.10.13
[TIL]동기와 비동기  (0) 2023.10.13
Comments