LeetCode - 599. Minimum Index Sum of Two Lists(Array, HashTable, String)*

YAMAMAMO·2022년 2월 28일
0

LeetCode

목록 보기
34/100

문제

Andy와 Doris가 저녁식사를 위해 식당을 선택하기를 원하는데 둘 다 문자열로 대표되는 좋아하는 식당 목록을 가지고 있다고 가정해보자.
당신은 최소한의 리스트 인덱스 합으로 그들이 공통 관심사를 찾을 수 있도록 도와야 합니다. 답변 사이에 선택 항목이 있는 경우 순서 없이 모두 출력합니다. 항상 답이 있다고 가정할 수 있습니다.

https://leetcode.com/problems/minimum-index-sum-of-two-lists/

Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings.
You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.

Example 1:

Input: list1 = ["Shogun","Tapioca Express","Burger King","KFC"], list2 = ["Piatti","The Grill at Torrey Pines","Hungry Hunter Steakhouse","Shogun"]
Output: ["Shogun"]
Explanation: The only restaurant they both like is "Shogun".

Example 2:

Input: list1 = ["Shogun","Tapioca Express","Burger King","KFC"], list2 = ["KFC","Shogun","Burger King"]
Output: ["Shogun"]
Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).

풀이

자바입니다.

  • list1을 HashMap 에 넣습니다. Key 는 list1의 값이고 value 는 index 입니다.
  • index 합중 최소값을 찾기 위해 int min = Integer.Max_VALUE; 생성합니다.
  • constainsKey()를 사용해서 공통 관심 레스토랑을 찾습니다.
  • index합(i+map.get(list2[i]))과 min을 비교합니다.
  • min 보다 작으면 list 를 clear 하고 list에 값을 추가한다.
  • min 과 같으면 list에 값만 추가한다.
class Solution {
    public String[] findRestaurant(String[] list1, String[] list2) {
        HashMap<String, Integer> map = new HashMap<>();
        ArrayList<String> list = new ArrayList<>();
        for(int i=0;i<list1.length;i++)    map.put(list1[i],i);
        
        int min=Integer.MAX_VALUE;
        for(int i=0;i<list2.length;i++){
            if(map.containsKey(list2[i])){
                if(i+map.get(list2[i])<min){
                    min=i+map.get(list2[i]);
                    list.clear();
                    list.add(list2[i]);
                }else if(i+map.get(list2[i])==min){
                    list.add(list2[i]);
                }
               
            }
        }
        
        
        return list.toArray(new String[list.size()]);
    }
}
profile
안드로이드 개발자

0개의 댓글