일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 권한부여
- 자기계발
- 데일리
- 첫줄
- tㅐ
- 데이터베이스생성
- 요청파라미터
- 노스마트폰챌린지
- 데이로그
- 소트라테스익스프레스
- 책추천
- 내장객체영역
- 스프링
- 횡단관심사
- 2챕터독서
- 생크림활용기
- diario
- daily
- final변수
- 종단관심사
- onlyfullgroupby
- 복습!
- 일상
- 테이블생성
- 도전로그
- MySQL
- requestparameter
- JSP
- InteliJ
- 평가용
- Today
- Total
Emma.log()
프로그래머스_해시_완주하지못한선수 본문
1. 참석한 선수들을 해시맵에 저장, 키는 문자열로, value는 integer형으로 선언해서 저장
HashMap은 Key값을 해싱해 찾기 좋게 분류해둔다. 여기서는 배열 안의 문자열을 해싱해야하니 Key에 문자열을 넣으면 자동으로 해싱돼서 저장된다는 의미
Key값이 배열의 문자열로, Value는 문자열의 갯수로 설정해줍니다. 먼저 participant 배열의 값을 HashMap에 저장하면서 만약 현재 map 안에 해당 문자열이 없다면 value값에 원래 디폴트로 설정된 0에 1을 더해주고, 있다면 해당 value값에 1을 다시 더해줍니다. 이렇게하면 각각의 문자열이 몇 개가 있는지 저장된다.
생소한 메서드 __ getOrDefault (Object key, V DefaultValue)
getOrDefault(Object key, V DefaultValue)
- key : 값을 가져와야 하는 요소의 키입니다.
- defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값입니다.
반환 값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환됩니다.
getOrDefault를 넣어주지 않으면 중복 체크가 되지 않아요. HashMap의 put은 key가 존재하면 value를 새로운 값으로 바꿔주니까요. 이미 등록된 동명이인이 있다면 map.getOrDefault로 인해서 2라는 값이 들어가게된다
위 메서드를 사용해서 value값에 상수가 결국 기본적으로 다 1이 부여가되고, 이제 완주자들을 비교하려면
새로이 hashmap에 넣어주면서 이번에는 value 값에서 1씩 빼면, 참가자와 비교해서 같은같이면 0이 되고 다른값이면 1이 남아있게 될것이다.
그럼 hashMap에서 value값이 0보다 큰 key를 찾아서 return 하면 되는데 return할때에 entry객체를 사용해서 단순히 KeySet이 아니라 entrySet자체를 가져오도록하였다. entrySet() : 엔트리 객체로 이루어진 Set를 리턴한다.
package Hash;
import java.util.*;
import java.util.Map.Entry;
public class Test01 {
public String solution(String[] participant, String[] completion) {
String answer = "";
participant = new String [] {"leo", "kiki", "eden"};
completion = new String[] {"eden", "kiki"};
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(String p : participant) {
map.put(p, map.getOrDefault(p, 0)+1);
}
for(String c : completion) {
map.put(c,map.get(c)-1);
}
for(Entry<String, Integer> entry : map.entrySet()) {
if(entry.getValue() > 0) {
answer = entry.getKey();
break;
}
}
return answer;
}
}
HashMap에 대한 이해도를 높일수 있었다.. 되게 쉽고 기본적인 문제라 하는데.. 한동안 hashMap을 이용해서 값을 담아보지 않아서 사실 어떻게 접근해야할지 너무 막막했다.
해당 문제가 많은 사람들이 기본적인 문제라고 하는데.. 나한테는 좀 어려운 숙제같은 느낌이엇다.. 아무리 돌려도 결과도 안보여서 더더욱... 그랬는데.. 그래도 문제 풀면서 map에 대한 내용과 HashMap을 이용한 값비교, 값을 넣고, 키를 이용해서 값을 빼고 하는 것등을 공부할수 있었다. 좀더 관련된 문제를 풀면서 그래도 많이 사용하는 컬렉션인 HashMap을 좀더 공부해야겠다.
참고한 사이트
프로그래머스_해시_완주하지 못한 선수 (JAVA)
기초적인 문제로 개념 자체는 엄청 쉬운데 최적화된 로직 구성이 어려운 것 같습니다. 간단히 participant 배열 안에 있는 문자열 중 completion 배열 안에 포함되지 않는 문자열 1개가 있으니 잘 찾아
codevang.tistory.com
https://codevang.tistory.com/289