일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- array
- compare()
- HTML
- Stack
- 스파르타코딩클럽
- 우선순위큐
- hash
- 배열
- 네이버
- 프로그래머스
- 코딩테스트
- SQL
- HashMap
- 자바
- javac
- point queue
- Coding
- 해쉬
- Naver
- Eclipse
- Queue
- string
- Python
- 자료구조
- Java
- CSS
- coding test
- HashSet
- programmers
- 정렬
- Today
- Total
youngik
해시 (완주하지 못한 선수) 본문
먼저 위 문제를 분석을 해보았을 때,
1. participant의 수가 항상 completion+1이다.
2. 동명이인이 없을 때에는 participant에서는 존재하지만 completion에 없는 String 출력
3. 동명이인이 있을 때에는 participant의 동일인물의 이름을 카운트해서, completion 동일인물의 이름의 카운트와
비교를 해서 같지 않는 String 출력
처음에는 배열로 위 문제를 만들었었는데, 정답은 맞았지만 효율성 문제에서 통과하지 못했다ㅠ
2중 반복문을 썻기 때문에 100,000 * 100,000번의 연산이 들어가서 그런 것 같다.
그래서 위 문제가 해쉬에 포함이 되기 때문에 Hashmap로 다시금 코드를 작성했다.
Hashmap는 (key, value)의 쌍으로 들어가는 값이고,, 해당 key를 조회해서 value값을 불러오거나
길이 등등 다양한 method들을 이용할 수 있다. (*생각보다 쓰일 곳이 많다. 필수로 알기!!)
*기초적인 method
put() = {key, value}쌍으로 Hashmap에 삽입하는 함수
size() = Hashmap 크기 출력
clear() = Hashmap 비우기
values() = Hashmap 내에 있는 {value}값을 불러옴
keySet() = Hashmap 내에 있는 {key}값을 불러옴
get([key]) = Hashmap 내 key에 해당하는 value값을 불러옴
getOrDefault(Object key, defalutValue) = key값에 해당하는 value를 불러오고, key가 없을때에는 defaultValue값으로 불러옴.
*출처 : (오라클 java) docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
동일한 HashMap값을 어떻게 count를 할까? 고민을 많이 했었는데,, (=> HashMap은 key 중복 허용을 하지 않음)
위 getOrDefault를 이용해서 동일한 key의 값을 count해서 HashMap에 넣는 방법이 있었다.
위 코드를 보면 쉽게 이해가 갈 것이다. map에 put할 때, 해당 value값을 불러오고
만약 없다면 (key = 1)로 해서 집어놓고 동일한 값이 있을때는 value값을 불러오고 +1을 해서 넣어주는 방식으로 구현한다.
다시 코드를 작성했을 때, participant와 completion Hashmap을 각각 2개로 만들어서 구현을 했는데,
효율성에서 1번을 통과하지 못했다,,, (*무엇이 문제인가,,,)
그래서 다른 분들이 작성한 일부 코드를 봤었는데
completion에 이름이 있을 때마다 Hashmap에 key(이름)의 value(중복값)을 -1씩 하는 것이다.
이렇게하면 중복된 이름이 없을 때에도, 완주하지 못한 사람의 이름(key)의 value가 1이 되고
중복된 이름이 있을 때에도, 완주하지 못한 사람의 이름(key)의 value가 1이 된다.
역시,, 문제를 좀 더 해석하는 능력과 직관적으로 이해하는 부분이 많이 부족하다고 느꼈다.
위의 방법으로 다시 코드를 작성했을 때, 마지막 효율성 문제도 통과했다.
생각보다 코드도 몇 줄 되지도 않아서ㅎㅎ,,, 공부 더 열심히하자!!!
'programmers' 카테고리의 다른 글
힙 (더 맵게) (0) | 2021.04.12 |
---|---|
해시 (위장) (0) | 2021.04.10 |
해시 (전화번호 목록) (0) | 2021.04.09 |
완전탐색 (모의고사) (0) | 2021.04.07 |
스택/큐 (프린터) (0) | 2021.04.07 |