본문 바로가기

알고리즘

[프로그래머스/Java] 완주하지 못한 선수 - HASHMAP 풀이

저번에 디피 맛보기 해서 오늘은 HASHMAP 뿌셔보려고 프로그래머스를 켰다

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map <String,Integer> hashmap = new HashMap<>();
        int calculator = 0;
        for(String each_p : participant){	// 출전한 선수리스트
            if(hashmap.get(each_p)==null)	// 중복된 이름이 아직 없는 경우
                hashmap.put(each_p,1);
            else{ 	// 중복된 선수 이름이 있을 경우
                calculator = hashmap.get(each_p); 	// 기존에 있던 값을 가져와서
                hashmap.put(each_p,calculator+1); 	// 그 값을 1 키워준 뒤 다시 저장
            }
        }
        for(String each_c : completion){ 	// 완주한 선수 리스트
            calculator = hashmap.get(each_c); 	// 리스트에 있는 이름들을 hashmap에서
            hashmap.put(each_c,calculator-1); 	// 찾아서 1씩 빼준 뒤 다시 저장
        } 	// 그럼 한명빼고 다 0이 될 것임
        for(String key : hashmap.keySet()){ 	// hashmap의 key값을 불러와서 for문
            if(hashmap.get(key)==1){ 	// hashmap에 key 넣었을 때 1이 나오면
                answer=key;	 	// 그놈이 아직 완주 못한놈
                break; 	// 끝!
            }
        }
        return answer; 	// 답 리턴
    }
}

해시맵 사용법을 잘 몰라서 구글링해서 다른분 코드 보고 손코딩해봤더니 이해가 더 빠른것 같다.!

거의 외운 수준이긴한데 바로 짜지는게 뿌듯..,.,

 

처음 써본 문법이

for(String each_p : participant){ }

for문 이렇게 쓰는거.. 자바에서는 잘 안썼는데 편한 것 같다

그리고 hashmap 자체를 안써봤는데 입력이 put 출력이 get 리스트셋 뽑아오는게 keySet

코테볼 때 다 외우기보다는 api 문서 보는 연습도 해야돼서 혼자 하다가 막히면 api 문서 참고했다.

손코딩하고나서 api 문서 보니까 기억을 더듬어서 찾게된다. 그래서인지 찾기도 더 수월한 것 같다.

 

hashmap 자바 api 문서

docs.oracle.com/javase/7/docs/api/