프로그래머스 코딩테스트(해쉬) - <완주하지 못한 선수>

김찬울·2021년 6월 23일
0

문제설명:

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개의 값이 남게되는데 그값이 반환값이다.

profile
코린코린이

0개의 댓글