문제설명:
participant 는 참가자
completion 은 완주한 참가자
각 길이는 1만큼 차이가 있다.
그리고, 참가자의 이름이 중복되는 경우도 있다.
반환값은 완주하지 못한 참가자.
문제 풀이(1) - 시간 복잡도가 높지만 이해가 쉬운 코드
간단하다 완주자에 있는 걸 참가자에서 하나씩 제거하면 끝.
문제는 딕셔너리를 사용안해서 시간복잡도가 너무 증가함.
문제풀이(2) - 해쉬없아 해쉬를 사용한 코드
다른 분들의 문제풀이 좀 봤는데 counter를 사용했더라 그 counter함수를 직접 구현해보았다.
결국에 hash 문제는 딕셔너리와 hash를 주로 사용하는데
그 이유는 hash를 통해 접근할 경우 시간복잡도가 비약적으로 줄어들어서 좋다.
간단하게 hash를 설명하자면 c언어 포인터와 참조에서 사용한 주소값과 유사하다.
주소값으로 접근시 빠르다. 굳이 for문으로 하나하나 안 찾아도 괜찮다.
일단 이어서 코드설명:
간단하다 참가자를 돌아서 해당하는 값을 key로 두는 answer를 만든다.
그리고 해당 key에 중복값이 없다면 1로 만들고 만약 중복값이 있다면 기본 값 1에서 1을 계속 더한다.
그다음 완주자 리스트를 돌려서
answer에서 값이 1이면 삭제시키고
값이 1이 아니라는 것은 중복이므로 1씩 감소해나간다.
그러면 answer에는 필연적으로 1개의 값이 남게되는데 그값이 반환값이다.