Algorithm/프로그래머스

[프로그래머스] [Python] Level1_모의고사

은세라 2021. 8. 5. 00:13

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

1차 시도

def solution(answers):
    rank = [0, 0, 0]
    pick1 = [1, 2, 3, 4, 5] #5의 나머지
    pick2 = [2, 1, 2, 3, 2, 4, 2, 5] #8의 나머지
    pick3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] #10의 나머지
    answer = []
    
    for i in range(0,len(answers)):
        if answers[i] == pick1[i%5] : rank[0] += 1
        if answers[i] == pick2[i%8] : rank[1] += 1
        if answers[i] == pick3[i%10] : rank[2] += 1
    rank = [(r, i) for i, r in enumerate(rank, start=1)]
    print(rank)
    
    for i in rank:
        if i[0] == 0: continue
        while(answer):
            if answer[0] > i[0]: answer.append(i[1])
            elif answer[]
    # rank[0] = max(rank) #1등
    # rank[1] = max(rank) #2등
    # rank[2] = max(rank) #3등
    
#     rank = [(r, i) for i, r in enumerate(rank, start=1)]
#     rank.sort(key = lambda x : int(str(x[0])+str(x[1])) , reverse=True)
#     print(rank)
    
#     answer = [rank[i][1] for i in range(0,3)]
    print(answer)

이상한데 꽂혀서 sort했다가 reverse로 하면 동률인 사람들 오름차순 처리가 안돼서 

머리싸매다가 30분 시간 다됨

2차 시도

def solution(answers):
    rank = [0, 0, 0]
    pick1 = [1, 2, 3, 4, 5] #5의 나머지
    pick2 = [2, 1, 2, 3, 2, 4, 2, 5] #8의 나머지
    pick3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] #10의 나머지
    answer = []
    
    for i in range(0,len(answers)):
        if answers[i] == pick1[i%5] : rank[0] += 1
        if answers[i] == pick2[i%8] : rank[1] += 1
        if answers[i] == pick3[i%10] : rank[2] += 1

    for i, r in enumerate(rank):
        if r == max(rank):
            answer.append(i+1)

    return answer

enumerate까지 접근 잘했는데.... 그냥 r이 max인걸로 i만 잘 받아오면 됐었는데...

아쉽다...

💡최종로직

0. 1번, 2번, 3번 수포자의 찍는 방식을 list로 미리 선언함

0. 마지막에 점수를 담을 rank를 list로 선언함

1. 나머지 연산을 활용해서 맞은 갯수를 구한 다음에 rank에 담음

2. enumerate를 돌리면서 index를 돌리는데

  2-1. 이때 rank의 값 중 max를 구해서 index에 0을 더한 다음에 answer에 순차적으로 넣는다

3. answer를 return 한다