본문 바로가기

코딩 테스트/프로그래머스

[Python] 프로그래머스 lv.0 전국 대회 선발 고사

 

문제 분석

  • 참여 가능한 등수 높은 3명 선발
  • 3명의 등수에 따라 1등의 rank 인덱스*10000 + 2등의 rank 인덱스*100 + 3등의 rank 인덱스

 

정답 코드

실패..

def solution(rank, attendance):
    answer = 0
    std = []
    for i in range(len(rank)):
        # 참가 가능한 학생만 남기기
        if attendance : 
            std.append(rank[i])
    sorted(rank, reverse=True)[:3]
    answer = rank[0]*10000 + rank[1]*100 + rank[2]
    return answer

 

다른 사람 코드 1

def solution(rank, attendance):
    arr = sorted([(x, i) for i, x in enumerate(rank) if attendance[i]])
    return arr[0][1] * 10000 + arr[1][1] * 100 + arr[2][1]
  • 등수에 따른 정렬을 할 거기 때문에 for i, x로 받고, (x,i)로 정렬

 

다른 사람 코드 2

def solution(rank, attendance):
    selected = []
    for i, attend in enumerate(attendance):
        if attend:
            selected.append((rank[i], i))

    selected.sort()
    a, b, c = selected[:3]

    return 10000 * a[1] + 100 * b[1] + c[1]

 

다른 사람 코드 3

def solution(rank, attendance):
    lst = []

    for i in range(len(rank)):
        if attendance[i]:
            lst.append((rank[i],i))

    lst.sort()

    return 10000*lst[0][1]+100*lst[1][1]+lst[2][1]

 

다른 사람 코드 4

def solution(rank, attendance):
    answer = 0
    n = len(rank)
    s = []
    for i,v in enumerate(rank):
        if attendance[i] == True:
            s.append([v,i])
    s.sort()
    a,b,c = s[0][1],s[1][1],s[2][1]

    return 10000 * a + 100 * b  + c