문제 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을 주로 푸는데 금방금방 풀리는 것 같다.
질문은 환영합니다.
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 124 나라의 숫자 Level 2 (0) | 2021.08.11 |
---|---|
프로그래머스 멀쩡한 사각형 Level 2 (0) | 2021.08.07 |
프로그래머스 오픈채팅방 Level 2 (0) | 2021.08.05 |
프로그래머스 짝지어 제거하기 Level 2 (0) | 2021.08.05 |
문제 Programmers 체육복 (Level 1) (0) | 2021.08.02 |
댓글