본문 바로가기
코딩테스트 연습

프로그래머스 완주하지 못한 선수 Level 1

by 동배_ 2021. 8. 3.

문제 Programmers 완주하지 못한 선수 (Level 1)

https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3

문제 해석 및 풀이 방법

1. completion내에 있는 리스트와 participant의 리스트를 비교해서 없는 리스트를 추출하면 그게 정답이다.

2. 주의할 점은 동명이인이 있음으로 무작정 for문돌린다고 안될 것 같다.

3. 그래서 해시테이블 구조인 딕셔너리(java로치면 hashmap)을 이용하여 서로 비교후 일치하지 않는 값을 뺴네 정답으로 추출한다.

내가 작성한 소스코드

def solution(participant, completion): dic ={} dic2 ={} for i in participant: try: dic[i] += 1 except: dic[i] = 1 for i in completion: try: dic2[i] += 1 except: dic2[i] = 1 for i in dic: try: if dic[i] == dic2[i]: pass else: return i except: return i

먼저 빈 딕셔너리를 2개 생성 후 예외처리를 통해 키값이 없으면 생성해주고 있으면 값을 +1해준다.

그 후 2개의 딕셔너리의 키값을 통해 비교 후 키를 통해 불러온 값이 다르거나 혹은 오류가뜨면(일치하지 않음 크기가 달라서 인덱스 초과) 그 값을 결과로 두게 코드를 짯다.

결론

처음에 리스트만을 통해 해보려고 했었다. 하지만 처음에 성공했나? 싶었지만 이름이 여러번 겹치는경우 ex)[길동,길동,민희,민희] 인경우를 생각을 못하고 짯다가 테스트 코드 몇몇에서 막혀버려서 조금 고민했던 것 같다.

조금 고민을 하다가 코딩테스트 연습란에 해시라는 카테고리를 보고 해시테이블을 생각해냈다. 그래서 파이썬에 해시테이블형태인 딕셔너리를 통해 문제를 풀었다. 아직은 레벨1을 주로 푸는데 금방금방 풀리는 것 같다.

질문은 환영합니다.

댓글