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>
<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>