카테고리 없음

프로그래머스 코테 연습2024 KAKAO WINTER INTERNSHIP가장 많이 받은 선물

DTV 2024. 6. 23. 19:20

https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

친구들 이름이 있고 선물을 주고 받은 이력이 나온다.

이력을 이용해 선물지수를 작성하고

선물을 많이 한사람은 1점, 같은경우 선물지수가 높은 사람이 1점을 얻어 최대점수를 계산한다,

=["muzi", "ryan", "frodo", "neo"]
b=["muzi frodo", "muzi frodo", "ryan muzi", "ryan muzi", "ryan muzi", "frodo muzi", "frodo ryan", "neo muzi"]
solution(a,b)

 

def solution(friends, gifts):
    answer = 0
    adic = {v:i for i,v in enumerate(friends)}
    num = [[ 0 for i in range(len(friends))] for i in range(len(friends))]
    extra = [ 0 for i in range(len(friends))]
    prize = [ 0 for i in range(len(friends))]
    for sendto in gifts:
        sp = sendto.split()
        num[adic[sp[0]]][adic[sp[1]]] +=  1
        extra[adic[sp[0]]] += 1
        extra[adic[sp[1]]] -= 1
            
    for yi,yv in enumerate(num):
        for xi,xv in enumerate(yv):
            if(yi == xi):
                continue
            if num[yi][xi] > num[xi][yi]:
               prize[yi] += 1
            elif  num[yi][xi] == num[xi][yi]:
                if extra[yi] > extra[xi]:
                    prize[yi] += 1
    answer = max(prize)
    return answer

 

def solution(friends, gifts):
    f = {v: i for i, v in enumerate(friends)}
    l = len(friends)
    p = [0] * l
    answer = [0] * l
    gr = [[0] * l for i in range(l)]
    for i in gifts:
        a, b = i.split()
        gr[f[a]][f[b]] += 1
    for i in range(l):
        p[i] = sum(gr[i]) - sum([k[i] for k in gr])

    for i in range(l):
        for j in range(l):
            if gr[i][j] > gr[j][i]:
                answer[i] += 1
            elif gr[i][j] == gr[j][i]:
                if p[i] > p[j]:
                    answer[i] += 1
    return max(answer)