Woopii Vyeolog

[프로그래머스 코딩테스트 연습] 해시 1 본문

코딩테스트 연습

[프로그래머스 코딩테스트 연습] 해시 1

WooPii 2020. 4. 20. 21:27

(해당 테스트 링크 : https://programmers.co.kr/learn/courses/30/parts/12077)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해시란?

해시(hash)란 데이터의 효율적 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 자료구조이다.
이 때 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시값(hash value), 매핑하는 과정 자체를 해싱(hashing)라고 한다.
자료구조란?

자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.
더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.
신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다. 효과적으로 설계된 자료구조는 실행시간 혹은 메모리 용량과 같은 자원을 최소한으로 사용하면서 연산을 수행하도록 해준다.

 

1번 문제 : 완주하지 못한 선수

 

문제 설명

 

내가 한 풀이(답은 나오지만 hash자료구조를 안썻기 때문에 오답임)

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
       
        //배열을 정렬
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        //participant배열의 마지막 값이 아닐 경우
        for(int i = 0; i<completion.length;i++){
            if(!participant[i].equals(completion[i])){
                answer = participant[i];
                break;
            }
        }
        
        //participant배열의 마지막 값일 경우
        if(answer.equals("")){
            answer = participant[participant.length-1];
        }
        return answer;
    }
}

 

다른 사람꺼 참고한 풀이(HashMap 사용)

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String, Integer> hm = new HashMap<String, Integer>();
        
        //참가자 이름을 Map에 넣기(key : 참가자 이름, value : 해당 이름의 인원 수)
        //getOrDefault메소드로 중복 입력(값이 들어가면 vlaue는 1 중복 수 만큼 +1)
        for(String name: participant){
             hm.put(name,hm.getOrDefault(name,0)+1);
        }
        
        //완주자 만큼 인원수를 빼줌
        for(String name: completion){
             hm.put(name,hm.get(name)-1);
        }
        
        //완주 못한 선수 이름을 추출한다.
        for(Map.Entry<String,Integer> playerMap: hm.entrySet()){
            if(playerMap.getValue() == 1){
                answer = playerMap.getKey();
            }
        }
        return answer;
    }
}

 

 

Comments