Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

개발합니다

[002] 완주하지 못한 선수 본문

알고리즘

[002] 완주하지 못한 선수

돈기법 2022. 4. 3. 22:10

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

 

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

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

programmers.co.kr

 

[답]

import java.util.HashMap;
import java.util.Map.Entry;

public class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        //Map : key, value 값으로 구성된 객체 저장
        //HashMap : 해싱(Hashing) 사용하기 때문에 많은 양의 데이터를 검색하는 데 뛰어난 성능 보임
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        
        for (String player : participant) {
                //이전에 player가 해시맵에 없으면 0을 주고 있으면 player의 값을 가져와서 + 1
		hm.put(player, hm.getOrDefault(player, 0) + 1);
	}
        System.out.println(hm);
        
        for (String player : completion) {
		hm.put(player, hm.get(player) - 1);
	}
        System.out.println(hm);
        
        //keySet() : key값만 받아서 get(key)로 value 출력 가능
        //entrySet() : key, value 모두 필요할 경우 사용
        for (Entry<String, Integer> entry : hm.entrySet()) {
		if(entry.getValue() != 0) {
			answer = entry.getKey();
		}
	}
        
        return answer;
    }
}

 

[풀이]

HashMap은 key, value 값으로 구성된 entry 객체를 저장하는 구조이다. (key 중복 X | value 중복 O)

 

값을 추가하기 위해서 put(key, value) 메서드를 사용한다.

이때 key값이 이미 내부에 존재한다면 기존의 value는 새로 입력되는 값으로 대체된다.

 

값을 삭제하기 위해서 remove(key) 메소드를 사용한다.

모든 값을 제거하려면 clear() 메소드를 사용한다.

 

그냥 print로 값을 출력할 경우 아래 예시처럼 key와 value 값이 같이 출력된다.

{ana=1, mislav=2, stanko=1}

난 중간중간 값을 확인하기 위해 System.out.println()를 통해 해시맵을 출력해주었다.

특정 key값의 value를 가져오고 싶다면 get(key)를 사용해 출력해주면 된다.

 

전체를 출력하기 위한 메소드로 enrtySet(), keySet()가 있다.

entrySet()은 key, value가 둘 다 필요할 경우, keySet()은 key만 필요할 경우 사용하는데 get(key)를 통해 value도 출력할 수 있으므로 어떤 메서드를 선택하든 상관은 없다.

하지만 key값을 이용해 value를 찾는 과정에서 시간이 많이 소모되기 때문에 entrySet()을 사용하였다.

 

- keySet()을 사용하는 방법

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

 

getOrDefault(Object key, V DefaultValue)를 사용해서 입력하려는 player가 해시맵에 존재한다면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 지정해둔 디폴트 값이 반환되도록 하여 이름이 중복되는 선수를 구분하였다.

 

 

 

- 참고 글

https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C

 

[JAVA] Map - getOrDefault 이란? 사용법 및 예제

getOrDefault - 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드 사용 방법 getOrDefault(Object key, V DefaultValue) 매개 변수 : 이 메서드는 두 개의 매개 변수를 허용합니.

junghn.tistory.com

https://coding-factory.tistory.com/556

 

[Java] 자바 HashMap 사용법 & 예제 총정리

HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는

coding-factory.tistory.com

 

'알고리즘' 카테고리의 다른 글

[005] 크레인 인형뽑기 게임  (0) 2022.04.04
[004] 숫자 문자열과 영단어  (0) 2022.04.04
[003] 전화번호 목록  (0) 2022.04.03
[001] 피보나치 수열 출력  (0) 2022.04.03