프로그래머스 Level 2 : 순위 검색
분명 문제의 Level은 2인데, 카카오 문제여서 그런지
체감상 훨씬 더 높은 Level의 문제로 느껴졌다.
1차 시도 : 단순 For문
처음엔 Queue와 2차원 배열을 이용해 단순히 For문을 돌려
Query에 맞는 행만 4번 추려 나가는 식으로 진행하려고 했다.
Info를 문자열 파싱을 통해 2차원 배열로 만들어 낸 뒤,
주어지는 Query에 부합하는 행만 추려내는 식이었다.
하지만 100줄이 넘는 Code를 적다가, 이건 아니라는 생각이 들었다.
문제를 맞힐 수는 있겠지만, 효율성 면에서 모두 시간초과가 뜰 것이다.
2차 시도 : Hash map과 Bit masking
세상엔 정말 똑똑한 사람이 많은 것 같다.
문제 해결의 Key는 다음과 같다.
- 문자열 파싱 방식은 동일하다.
- Info를 파싱한 뒤, Map에 Info에서 나올 수 있는 16가지 Query를 모두 넣는다.
- 이 때 비트 마스킹을 통해서, ”-“ 를 넣을 자리를 정해준다.
- 각 Map의 Key에 대한 Value가 Score의 Vector로 저장된다.
- 따라서 그 중에 Query에 해당 되는 값의 수만 세면 된다.