링크

순위검색

난이도

  • 프로그래머스 난이도 2인데 아이디어떠오르는게 어려움 거의 3.5정도

문제요약

  • 언어,직군,경력,소울푸드,점수가 지원자마다 있을때, 쿼리가 주어지고 해당 쿼리에 알맞은 지원자의 수를 리턴
    • 쿼리에 100점수이면 100점수이상인 지원자들을 찾는것

접근

  • 지원자*쿼리로 하면 정확성은 되지만, 효울성은 빵점이된다.
    • 아이디어가 안떠올라서…. 해설을 참고하였다.
  • 정렬된 점수에서 특정 점수이상의 개수를 구하는데 이분법을 이용해 index를 찾아서 계산해줘야 한다.
    • o(n)보다는 o(logn)이 빠르니까

간단 알고리즘

  • 지원자의 정보를 쪼개서 저장
    • 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개 가지수를 전부 저장해서 한다는게 비효율적인거처럼 보이는데 효율적으로 잘 된다.
  • 위와같은 방식을 바로 생각하면 빠르게 구현이 되지만, 방법을 모르니 아예 손이 안갔다.