링크
순위검색
난이도
- 프로그래머스 난이도 2인데 아이디어떠오르는게 어려움 거의 3.5정도
문제요약
- 언어,직군,경력,소울푸드,점수가 지원자마다 있을때, 쿼리가 주어지고 해당 쿼리에 알맞은 지원자의 수를 리턴
- 쿼리에 100점수이면 100점수이상인 지원자들을 찾는것
접근
- 지원자*쿼리로 하면 정확성은 되지만, 효울성은 빵점이된다.
- 정렬된 점수에서 특정 점수이상의 개수를 구하는데
이분법
을 이용해 index를 찾아서 계산해줘야 한다.
간단 알고리즘
- 지원자의 정보를 쪼개서 저장
- save = dict로 지정
- 점수는 모두 공통으로 들어간다.
- (언어,직군,경력,소울푸드)를 조합으로 4,3,2,1,0개 뽑는 경우들을 key로 value는 점수로 해준다.
- key들은 위에서 나온 조합을 join한것으로 해줬다.
- 0개뽑는것은 따로 이름을 score로 해줬다.
- 각 자원자마다 16개가 나온다.
- 각 key마다 있는 점수배열들을 마지막에 한번씩 정렬해준다.
- 쿼리 확인
- 각 쿼리를 위에서만든 key와 같은 방식으로 join으로 만들어준다.
- and - and junior - 100
은 key는junior
value는 100이상으로 해준다.
- 해당 키에 있는 점수 배열에서 원하는 value의 이상인 갯수를 찾기 위해
이분법
으로 index를 빠르게 구하여 갯수를 계산한다.(점수갯수 - index)
후기
- 16개 가지수를 전부 저장해서 한다는게 비효율적인거처럼 보이는데 효율적으로 잘 된다.
- 위와같은 방식을 바로 생각하면 빠르게 구현이 되지만, 방법을 모르니 아예 손이 안갔다.