[프로그래머스/JAVA] 해시 - Lv1 완주하지 못한 선수

2021. 7. 14. 23:38·Computer Science/자료구조와 알고리즘

1. 문제

 

2. 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        HashMap<String,Integer> hm = new HashMap<>();
        String answer = "";
        
        for(String player : participant) 
            hm.put(player,hm.getOrDefault(player,0)+1);
        
        for(String player : completion) 
            hm.put(player,hm.get(player)-1);
        
        for(String key : hm.keySet())
            if(hm.get(key)!=0){
                answer = key;
                System.out.println(answer);
            }
        return answer;
    }
}

코드 긁고 싶은신 분들은 깃허브 참고

https://github.com/bosunKwak/Algorithm/blob/087df76cba0e8df56f8911237cda73c7f107eae0/hash/%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%9C%20%EC%84%A0%EC%88%98.java

3. 풀이

자료구조 알고리즘 "해시"를 이용해서 풀면 훨씬 효율적인 코드를 짤 수 있다. 

해시에 관한 개념적인 설명은 다음 링크를 참고하면 된다. -> "작성중ㅎㅎ" 

 

처음엔 해시가 아니라, 다른 방식으로 구현했었다.

-> Arrays 메소드를 이용하여 participant, completion 각각 오름차순으로 정렬하여 앞 index부터 차례로 비교하고 다르거나 없는 경우에, 해당 participant를 출력하는 방법을 사용하였다. 

 

But, 이 문제의 본질(?)은 "해시"를 이용해야한다는 것! 

 

(1) HashMap 생성하기

HashMap<String,Integer> hm = new HashMap<>();

HashMap이란, Key-Value를 관리하는 클래스라고 할 수 있는데, <String, Integer>로 지정하면, Key는 String형, Value는 Integer형으로 정의한다는 뜻이다. 

(Key : Participant의 이름, Value : Count)로 사용

 

(2) HashMap에 Participant 추가 ( == 해싱(Hashing))

for(String player : participant) 
            hm.put(player,hm.getOrDefault(player,0)+1);

HashMap.put(Key,Value)함수는 HashMap에 Key와 Value를 한 쌍으로 입력하는 함수이고

HashMap.getOrDefault('a',0)함수는 'a'라는 Key에 해당하는 value가 존재하면 가져오고, 존재하지 않으면 0을 default로 지정하여 사용하겠다는 뜻의 함수이다. 

 

(3) HashMap에서 Complement 빼기 

for(String player : completion) 
            hm.put(player,hm.get(player)-1);

추가할 때와 동일하게 HashMap.put함수를 사용한다. 

HashMap에 존재한다면  Value가 1이상으로 표시되어있을 것이고 해당 Value를 1을 빼준다.  

 

(4) Value가 0이 아닌 Participant 찾아 출력

for(String key : hm.keySet())
            if(hm.get(key)!=0){
                answer = key;
                System.out.println(answer);
            }

HashMap을 돌면서 Value가 0이 아닌 Participant를 찾는다. 

HashMap.keySet()함수는 HashMap의 전체 Key의 배열을 반환하는 함수이고, 

HashMap.get(key)함수는 Key에 해당하는 Value를 반환하는 함수이다. 

 

 

4. 링크

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

 

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

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

programmers.co.kr

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글

[프로그래머스\SQL 고득점 kit] SELECT문 :Mysql(1~7번), Oracle(7번)  (0) 2021.12.12
[Python] 수행시간과 메모리 사용량 측정  (0) 2021.07.16
[JAVA] 백준 2675번 : 문자열 반복  (0) 2021.07.10
[Algorithm] Exhaustive Search(완전검색), Greedy Algorithm(탐욕 알고리즘), Sort(정렬)  (0) 2021.07.07
[JAVA] 백준 10809번 : 알파벳 찾기  (0) 2021.03.30
'Computer Science/자료구조와 알고리즘' 카테고리의 다른 글
  • [프로그래머스\SQL 고득점 kit] SELECT문 :Mysql(1~7번), Oracle(7번)
  • [Python] 수행시간과 메모리 사용량 측정
  • [JAVA] 백준 2675번 : 문자열 반복
  • [Algorithm] Exhaustive Search(완전검색), Greedy Algorithm(탐욕 알고리즘), Sort(정렬)
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    오블완
    해시
    c++error
    mysql error
    leetcode
    티스토리챌린지
    LNK2001
    런타임 에러
    cmd error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[프로그래머스/JAVA] 해시 - Lv1 완주하지 못한 선수
상단으로

티스토리툴바