programmers_고득점키트(해시)

목차

  1. 완주하지 못한 선수
  2. 전화번호 목록
  3. 위장
  4. 베스트 앨범

1. 완주하지 못한 선수

def solution(participant, completion):
    d = dict()
    for x in participant:
        d[x] = d.get(x, 0) + 1
    for x in completion:
        d[x] -= 1
    dnf = [k for k, v in d.items() if v > 0]
    return dnf[0]


print(solution(["mislav", "stanko", "mislav", "ana"],
               ["stanko", "ana", "mislav"]))

2. 전화번호 목록

def solution(phone_book):
    for i in range(len(phone_book)):
        for j in range(i+1, len(phone_book)):
            if phone_book[i].startswith(phone_book[j]) or phone_book[j].startswith(phone_book[i]):
                return False
        return True


print(solution(["119", "97674223", "1195524421"]))

3. 위장

def solution(clothes):
    d = {}
    for i in clothes:
        d[i[1]] = d.get(i[1], 1)+1
    result = 1
    for v in d.values():
        result *= v
    return result - 1

print(solution([["yellow_hat", "headgear"], [
      "blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]	))

4. 베스트 앨범


     다음과 같은 구조를 가지게 된다.
    {
        '장르이름': {
            't': 전체 재생 시간
            'l': [노래정보리스트, {'v': 재생시간, 'i': 고유번호}]
        }
    }

def solution(genres, plays):
    d = {}
    for i, x in enumerate(genres):
        d[x] = d.get(x, {'t': 0, 'l': []})
        d[genres[i]]['l'].append({'v': plays[i], 'i': i})
        d[genres[i]]['t'] += plays[i]
    d = list(d.values())  # 정렬을 위해 리스트로 변형
    d = sorted(d, key=lambda k: k['t'], reverse=True)

    answer = []
    for i in range(len(d)):
        v = d[i]['l']
        v = sorted(v, key=lambda k: k['v'], reverse=True)
        for j in range(2 if len(v) >= 2 else len(v)):
            answer.append(v[j]['i'])
    return answer


print(solution(["classic", "pop", "classic",
                "classic", "pop"], [500, 600, 150, 800, 2500]))

참고자료 [프로그래머스]https://programmers.co.kr/learn/challenges

0%