처음 코드

def solution(rank, attendance):
    answer = 0
    sort_rank = []
    for idx, (r, a) in enumerate(zip(rank, attendance)):
        if a:
            sort_rank.append(r, idx)
    sort_rank.sort()
    
    a, b, c = sort_rank[:3]
    answer = 10000 * a + 100 * b + c
        
    return answer

<aside> 💡

마지막에 계산을 하기 위해선 리스트로 변환해서 idx로 꺼내와야 할 것 같아. enumerate()를 같이 사용했다.

Day19에서 배웠던 것처럼 zip( 매개변수 1, 매개변수2) 을 이용헀다

그러나 상위 3명을 어떻게 뽑아야 하는지 모르겠다.

또 for문을 돌려서 하나하나씩 하기엔,, 성장이 없는 것 같고,, 언패킹으로 할 수 있나?

</aside>

image.png

<aside> 💡

일단 에러부터 짚어보자. 또한 문제를 제대로 이해하지 못했었는데.. 등수를 계산식에 넣어야 하는 것이었다..!

rank가 아닌 인덱스번호가 등수가 되어 이를 계산식으로 사용해야 하는 것 같다.

수정한 코드!!

def solution(rank, attendance):
    answer = 0
    sort_rank = []
    for idx, (r, a) in enumerate(zip(rank, attendance)):
        if a:
            sort_rank.append((r, idx)) # append()는 항상 1개의 값만 넣을 수 있음! -> () 로 한번 더 묶어서 넣기!
            
    sort_rank.sort() # 등수 기준 정렬
    
    # a, b, c = sort_rank[:3] -> 틀린 코드 오늘 배운 _, 를 이용해보기!
    (_, a), (_, b), (_, c) = sort_rank[:3]
    answer = 10000 * a + 100 * b + c
        
    return answer
    # a, b, c = sort_rank[:3] -> 틀린 코드 오늘 배운 _, 를 이용해보기!
    (_, a), (_, b), (_, c) = sort_rank[:3]
    
이 코드를 for문으로도 돌려서 할 수 있었다!!

		a, b, c = [i for _, i in sort_rank[:3]]

훨씬 코드가 간결해졌다!!

<aside> 💡

만약 위 처럼 언패킹을 하지 않으려면?

a, b, c = sort_rank[ : 3]

이렇게 하면

a = (2,2) b = (4,4) c = (5,3)

이렇게 튜플 형식으로 가져오니까 answer = 10000 * a[1] + 100 * b[1] + c[1]

이렇게 튜플도 리스트처럼 인덱스로 접근할 수 있었다!!

</aside>