프그스_해시_완주하지 못한 선수_레벨1 (해시테이블_Counter 활용 중요)

RostoryT·2022년 7월 16일
0

String and Implementation

목록 보기
10/18

Counter는 Counter끼리 ' - '연산이 가능하다..! (중요)


나의 첫 접근 - 시간초과

# 시간초과
from collections import Counter

def solution(participant, completion):
    answer = ''
    
    for i in participant:
        if i not in completion:
            answer = i
            
    if answer == '':
        parti = Counter(participant)
        answer = parti.most_common(1)[0][0]
    return answer


print(solution(["leo", "kiki", "eden"],["eden", "kiki"]))
print(solution(["marina", "josipa", "nikola", "vinko", "filipa"],["josipa", "filipa", "marina", "nikola"]))
print(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]))


솔루션 - 블로그 봄

def solution(participant, completion):
    answer = ''
    leng = len(participant)
    
    participant.sort()
    completion.sort()
    completion.append('0')
    
    for i in range(leng):
        if completion[i] != participant[i]:
            answer = participant[i]
            break
            
    return answer

print(solution(["leo", "kiki", "eden"],["eden", "kiki"]))
print(solution(["marina", "josipa", "nikola", "vinko", "filipa"],["josipa", "filipa", "marina", "nikola"]))
print(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]))


  • 해시를 사용한 방법
    • 리얼 해시값으로 계산해서 +- 해주는 방식 (블로그 보면 이해됨)
def solution(participant, completion):
    hashDict = {}
    sumHash = 0
    
    # 1. Hash : Participant의 dictionary 만들기
    # 2. Participant의 sum(hash) 구하기
    for part in participant:
        hashDict[hash(part)] = part
        sumHash += hash(part)
        
    # 3. completion의 sum(hash) 빼기
    for comp in completion:
        sumHash -= hash(comp)
    
    # 4. 남은 값이 완주하지 못한 선수의 hash 값이 된다

    return hashDict[sumHash]

print(solution(["leo", "kiki", "eden"],["eden", "kiki"]))
print(solution(["marina", "josipa", "nikola", "vinko", "filipa"],["josipa", "filipa", "marina", "nikola"]))
print(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]))


  • Counter 사용한 방법 (중요)
    • Counter끼리는 연산이 된다..!!!!!! (중요)
    • 이때, answer에 값이 하나밖에 없어서 list( .keys())[0]으로 맨 앞에 꺼만 가져오는게 가능하다 (중요)
from collections import Counter
def solution(participant, completion):
    # 둘의 차를 구하면 정답만 남아있는 counter를 반환한다
    answer = Counter(participant) - Counter(completion)
    
    # 4. counter의 key값을 반환한다  (이때, answer에 값이 하나밖에 없어서 list( .keys())가 가능한거임)
    return list(answer.keys())[0]

print(solution(["leo", "kiki", "eden"],["eden", "kiki"]))
print(solution(["marina", "josipa", "nikola", "vinko", "filipa"],["josipa", "filipa", "marina", "nikola"]))
print(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]))

profile
Do My Best

0개의 댓글