kakao 기출(2021) - 순위 검색 JAVA

https://programmers.co.kr/learn/courses/30/lessons/72412

 

코딩테스트 연습 - 순위 검색

["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt

programmers.co.kr

[문제]

지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때,
각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.

  • String [] info, String [] query

[풀이 1]

효율성을 통과하지 못한 풀이.

모든 배열의 입력들을 탐색하는 풀이, 정확성에선 통과했으나 효율성을 통과하지 못함.

    int ansCnt = 0;
        for(String q : query){
            q = q.replaceAll("(and)", "");

            String qsplit [] = q.split("  ");
            int cnt = 0;
            for(String in : info){

                String ins [] = in.split(" ");
                String langu = qsplit[0];
                String jd = qsplit[1];
                String type = qsplit[2];
                String [] foodvalue = qsplit[3].split(" ");
                String soulFood = foodvalue[0];
                int value = Integer.parseInt(foodvalue[1]);
                if(qsplit[0].equals("-")){
                    langu = ins[0];
                } 
                if(jd.equals("-")){
                    jd = ins[1];
                }
                if(type.equals("-")){
                    type = ins[2];
                }
                if(soulFood.equals("-")){
                    soulFood = ins[3];
                }


                if(ins[0].equals(langu) && ins[1].equals(jd) && ins[2].equals(type) && ins[3].equals(soulFood)){
                    if(value<=Integer.parseInt(ins[4])) cnt++;
                }

            }
            answer[ansCnt++]=cnt;
        }

[풀이 2]

*Map, 이분탐색을 통한 풀이를 진행한다. *

* 이분탐색의 경우 LowerBound 로 해야함.