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;
}
}
코드 긁고 싶은신 분들은 깃허브 참고
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
'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 |