[프로그래머스] 42675 완주하지 못한 사람
프로그래머스 level1
문제
문제 풀이
HashMap 풀이
시간 초과 풀이
문제 리뷰
HashMap이란?
- key와 value를 하나의 쌍으로 묶어서 저장하는 컬렉션 인터페이스
- key는 중복될 수 없지만 value는 중복 가능
- 동일한 key에 value를 삽입하면 기존 value는 제거되고
새로운 value 갱신
HashMap 메소드 정리
Object get(Object Key)
- 지정된 key의 value 값을 반환한다.
Object put(Object Key, Object Value)
- HashMap에 key와 value를 저장한다.
boolean containsKey(Object Key)
- HashMap에 지정된 key가 포함되어 있는지 알려준다.
boolean containsValue(Object Value)
- HashMap에 지정된 value가 포함되어 있는지 알려준다.
Set keySet()
- HashMap에 저장된 모든 키가 저장된 Set을 반환한다.
HashMap 풀이
Hashmap을 사용해보는 것은 처음이라 좀 푸는데 시간이 걸렸다.
먼저 participant 배열에서 동명이인을 찾는 과정부터 시작했다.
HashMap에 차례로 participant을 넣어줄 때,
HashMap에 동명이인(중복값)이 없으면 value 값을 0으로 넣어주고,
동명이인(중복값)이 있으면 해당 valure 값을 1씩 증가시켜주었다.
이 과정을 통해 동명이인 value 값은 총 동명이인의 수가 된다.
동일한 key에 value를 삽입하면 기존 value는 제거되고
새로운 value 갱신
HashMap은 위와 같은 특성을 가진다.
이 것을 이용하여 completion 배열을 HashMap에 넣어
value 값은 1씩 감소시켜주었다.
그러면 완주한 사람들은 value 값이 0이 될 것이다.
동명이인 또한 모두 완주했다면 0 값을 갖게 될 것이다.
결국 value 값이 0이 아닌 사람이 완주하지 못한 사람이 되는 것이다.
시간 초과 풀이
처음에는 HashMap이 낯설어 다른 방법으로 문제를 풀었다.
완전 탐색을 통해 participant과 completion이 일치하면
값을 ““으로 둘 다 바꿔주었다.
둘 다 바꿔주지 않으면 동명이인을 체크할 수가 없다.
그리고 배열에서 ““이 아닌 participant를 결과값으로 반환해주었다.
이 풀이는 정확성 테스트는 모두 통과했으나
효율성 테스트에서 모두 시간초과가 되었다..
코테에서는 이런 경우를 겪을 수 있으니 항상 효율적인 방법을 고민해봐야겠다..
TMI
1월 빡시게 살자!
1일 2알고리즘 완료🤓
댓글남기기