본문 바로가기
Algorithm/자료구조

[프로그래머스] 코딩테스트 고득점 Kit - 해시 (JAVA)

by 루시킴 2021. 9. 30.

https://programmers.co.kr/learn/courses/30/lessons/42576?language=java 

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

Map<Key자료형, Value자료형> m = new HashMap<>()

m.getOrDefault(p,0) : m에 p랑 매칭되는 key가 존재하면 해당 value값 반환하고 없으면 0 반환

m.get(p) : key값이 p인 value값 반환

m.keySet() : m의 key 집합

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> m= new HashMap<>();
        
        for(String p : participant){
            m.put(p,m.getOrDefault(p,0)+1); //p라는 key가 존재하면 해당 value값반환 없으면 0반환
        }
        for(String p : completion){
            m.put(p,m.get(p)-1);
        }
        for(String key : m.keySet()){
            if(m.get(key)!=0){
                answer=key;
                break;
            }
        }
        return answer;
    }
}

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

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

Map<> m -> m.length() : m의 크기

m.put(key,value) : m에 (key:value) 삽입

m.containsKey(key) : 해당 key가 m에 존재하면 true 없으면 false

Arrays.sort(배열) : 오름차순 정렬

String[] s -> s.length : s의 크기 

a.startsWith(b) : a가 b로 시작하면 True 아니면 false

a.endsWith(b) : a가 b로 끝나면 True 아니면 false

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        Map<String,Integer> m = new HashMap<>();
        for(String s : phone_book){
            m.put(s,1);
        }
        for(String s : phone_book){
            for(int i=1; i<s.length(); i++){
                if(m.containsKey(s.substring(0,i))) return false;
            }
        }
        return answer;
    }
}

 

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        Arrays.sort(phone_book);
        for(int i=0; i<phone_book.length-1; i++){
            if(phone_book[i+1].startsWith(phone_book[i])) return false;
        }
        return answer;
    }
}

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map<String,Integer> map = new HashMap<>();
        for(String[] c : clothes){
            map.put(c[1],map.getOrDefault(c[1],0)+1);
        }
        for(String key : map.keySet()){
            answer*= map.get(key)+1;
        }
        return answer-1;
    }
}

댓글