[프로그래머스] 42675 완주하지 못한 사람

1 분 소요

프로그래머스 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알고리즘 완료🤓

댓글남기기