해시 (programmers)

cch_chan·2022년 10월 27일
0

알고리즘

목록 보기
2/3

해시 정의

해시란 무엇인가?
https://siyoon210.tistory.com/85

데이터를 다루는 기법 중에 하나

해시에 대한 나의 생각

배열 비교할 때 사용
데이터 정리 (중복제거 등)

사용된 함수 정의

a.sort(): 정렬 default(내림차순)
sorted(a): 원래 리스트를 건들지 않고 새로운 리스트로 반환
set(a): 중복제거
len(a): 배열 길이
zip(a, b, c):각 배열에 요소를 짝을 지어주는것
ex. ([[a[0],b[0],c[0]],[a[1],b[1],c[1]])
a.startswith(b):a가 b와 같다면 return값으로 거짓이나 참을 반환

사용된 모듈 정의

Collection : 데이터 처리를 위한 유용한 객체가 많이 모듈
ex. counter

해시 문제풀이

https://school.programmers.co.kr/learn/courses/30/lessons/42576
문제 : 완주하지 못한 선수 (없는애 찾기)

import collections

def solution(p, c):
    p.sort()
    c.sort()
    result = collections.Counter(p) - collections.Counter(c)
    
    return list(result)[0]

문제 : 폰켓몬 (더 작은수 찾기 2분의1, 중복제거)
https://school.programmers.co.kr/learn/courses/30/lessons/1845

    def solution(nums):
    answer=0
    
    leng=len(set(nums))
    result=int(len(nums)/2)
    
    if result > leng:
        answer = leng
    else : 
        answer = result
    
    return answer

다른 풀이

def solution(ls):
    return min(len(ls)/2, len(set(ls)))

문제 : 전화번호 (교집합찾기?)
https://school.programmers.co.kr/learn/courses/30/lessons/42577

def solution(phone_book):
    answer = True
    phone_book.sort()
    for i in range(len(phone_book)-1):
        if len(phone_book[i]) < len(phone_book[i+1]):
            if phone_book[i + 1][:len(phone_book[i])] == phone_book[i]:
                answer = False
                break
    return answer

다른 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
    return True

문제 : 위장 (조합구하는 식)
https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=python3

def solution(clothes):
    
    hash_map = {}
    for clothes, type in clothes:
        hash_map[type] = hash_map.get(type, 0) + 1
        
    
    answer = 1
    for type in hash_map:   
        answer *= (hash_map[type] + 1)
    
    
    return answer - 1

다른 풀이

from collections import Counter
from functools import reduce
def solution(clothes):
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer

reduce(집계 함수, 순회 가능한 데이터[, 초기값])
lambda 매개변수 : 표현식, 들어갈 변수x, y
ex. (lambda x,y: x + y)(10, 20) = 30

https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 : 베스트 앨범

  1. 장르별 총 부른 횟수 찾기
  2. 그중 가장 많이 부른순으로 0->1->2
  3. 같은 장르는 최대 2개
  1. counter로 총 부른 횟수 구분
profile
꾸준히 새로운 기술을 배워나가는중입니다.

0개의 댓글