본문 바로가기
코딩테스트/프로그래머스

22.10.07 [프로그래머스] 해시

by 개발송이 2022. 10. 7.

Q. 폰켓몬

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        
        HashSet<Integer> set = new HashSet<>();
        
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
            // hashset을 만들어 중복을 없앤다.
        }
        
        int answer = set.size();
        
        if (answer > nums.length/2) {
            answer = nums.length/2;
            // set에 담은 포켓몬의 수가 가져가야하는 포켓몬의 수보다 많다면 
            // 가져가야하는 포켓몬수가 리턴되고
            // 가져가야하는 포켓몬 수 보다 set에 담긴 포켓몬 수가 작다면
            // set에 담긴 종류만큼 가져갈 수 있다.
        }
        return answer;
    }
}

 

Q. 완주하지 못한 선수

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String, Integer> map = new HashMap<>();
        
        // map에 선수명, 인원수를 카운트해서 넣은 후
        // 완주한 선수 배열에 있으면 -1을 해준다.
        // 0이 된다면 완주 한 것
        
        for (String name : participant) {
            map.put(name, map.getOrDefault(name, 0) + 1);
            // 동명이인이 있는 경우 +1
        }
        
        for (String name : completion) {
            map.put(name, map.get(name) - 1);
            // 해당하는 선수의 value - 1해서 카운트 한걸 빼준다.
        }
        
        for (String key : map.keySet()) {
            if (map.get(key) != 0) {
                return key;
            }
        }
        
        return answer;
        
        
    }
}

 

Q.전화번호부 목록

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        
        Map<String, Integer> map = new HashMap<>();
        
        for (String key : phone_book) {
            map.put(key, 1);
        }
            
        for (int i=0; i<phone_book.length; i++) {
            for (int j=0; j<phone_book[i].length(); j++) {
                if (map.containsKey(phone_book[i].substring(0,j))) {
                    return false;
                    // 예를들면 1이 key로 존재하는지 -> 19 -> 119존재하는지 확인
                }
            }
        }
        

        return answer;
    }
}

 

Q. 위장

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        Map<String, Integer> map = new HashMap<>();
        
        for (int i = 0; i < clothes.length; i++) {
            map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1);
            // 해당 키가 존재하면 value반환 아니면 0을 반환
        }
        // 종류를 key에 담고 value는 개수를 담는다.
        
        for (String s : map.keySet() ) {
            answer *= (map.get(s) + 1); //하거나 안하거나 경우의 수 곱하기
        }
        answer--;
        // 아무것도 안하는 경우 하나를 뺀다.
        
        return answer;
        
        
    }
}