been_dev
been_archive
been_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • f-lab (3)
    • project (2)
    • solve (29)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 그리디
  • f-lab 2개월 후기
  • 프로그래머스
  • 숫자의표현
  • 큐
  • 자바 백엔드
  • MYSQL
  • 탐욕법
  • 에프랩
  • 스택
  • 실행창 작음
  • jadencase만들기
  • f-lab 1개월 후기
  • 버튼미노출
  • Eclipse
  • JWT
  • specify location
  • 에프랩 2개월 후기
  • 해시
  • 후기
  • 백준
  • 코딩테스트
  • 자바
  • 이진변환반복하기
  • 완전탐색
  • f-lab
  • 문자열
  • Downloading from external resources is disabled
  • Lombok
  • 에프랩 1개월 후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
been_dev

been_archive

solve

[프로그래머스/해시] Lv2. 순위 검색 (자바)

2024. 1. 11. 14:33

해시, 이분탐색

 

참고 : 개발자로 취직하기

import java.util.*;

class Solution {
    
    public int[] solution(String[] info, String[] query) {
        // 1. INFO 를 기반으로 hashmap 을 만든다.
        HashMap<String, ArrayList<Integer>> hashMap = new HashMap();
        for(String i : info) {
            String[] data = i.split(" ");
            String[] languages = {data[0], "-"};
            String[] jobs = {data[1], "-"};
            String[] exps = {data[2], "-"};
            String[] foods = {data[3], "-"};
            Integer value = Integer.parseInt(data[4]);
            
            for(String lang: languages) {
                for(String job : jobs) {
                    for(String exp : exps) {
                        for(String food : foods) {
                            String[] keyData = {lang, job, exp, food};
                            String key = String.join(" ", keyData);
                            ArrayList<Integer> arr = hashMap.getOrDefault(key, new ArrayList());
                            arr.add(value);
                            hashMap.put(key, arr);
                            
                        }
                    }
                }
            }
        }
        
        // 2. 각 hashMap 의 value 를 오름차순으로 만든다.
        for(ArrayList<Integer> arr : hashMap.values()) {
            arr.sort(null);
        }
        
        // 3. query 조건에 맞는 지원자를 가져온다.
        int[] answer = new int[query.length];
        int i=0;
        for(String q: query) {
            String[] data = q.split(" and ");
            int target = Integer.parseInt(data[3].split(" ")[1]);
            data[3] = data[3].split(" ")[0];
            String key = String.join(" ", data);
            
            if(hashMap.containsKey(key)){
                ArrayList<Integer> list = hashMap.get(key);
                // 4. binary search 를 통해서 lower-bound 를 찾는다.
                int left = 0;
                int right = list.size();
                while(left < right) {
                    int mid = (left+right)/2;
                    if(list.get(mid) >= target) {
                        right = mid;
                    } else {
                        left = mid + 1;
                    }
                }
                answer[i] = list.size() - left;
            }
            i++;
        }
        
        return answer;
        
    }
    
}

'solve' 카테고리의 다른 글

[백준 1764/해시] 실버4/듣보잡 (자바)  (0) 2024.01.11
[프로그래머스/해시] Lv1. 신고 결과 받기(자바)  (0) 2024.01.11
[프로그래머스/해시] Lv2. 메뉴 리뉴얼 (자바)  (0) 2024.01.11
[프로그래머스/그리디] Lv1. 키패드 누르기(자바)  (1) 2024.01.10
[프로그래머스/그리디] Lv1. 체육복(자바)  (0) 2024.01.09
    'solve' 카테고리의 다른 글
    • [백준 1764/해시] 실버4/듣보잡 (자바)
    • [프로그래머스/해시] Lv1. 신고 결과 받기(자바)
    • [프로그래머스/해시] Lv2. 메뉴 리뉴얼 (자바)
    • [프로그래머스/그리디] Lv1. 키패드 누르기(자바)
    been_dev
    been_dev

    티스토리툴바