코딩테스트

[파이썬] 모의고사 [CODING TEST #7]

ALTERww 2022. 7. 20. 00:37
320x100

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

 

 

 

1번은 5회, 2번은 8회, 3번은 10회 기준으로 반복하므로 리스트를 만들고, answers[ i ] 와 list[ i % len ]가 같으면

그 위치 값을 증가시켰다. order라는 리스트를 하나 추가로 만들어서 그 값을 저장시킴.

 

def solution(answers):
    answer = []
    order = [0] * 3
    t1 = [1,2,3,4,5] # 1
    t2 = [2,1,2,3,2,4,2,5] # 2
    t3 = [3,3,1,1,2,2,4,4,5,5] # 3

    for i in range(len(answers)):
        if answers[i] == t1[i % len(t1)]: # 1
            order[0] += 1
        if answers[i] == t2[i % len(t2)]: # 2
            order[1] += 1
        if answers[i] == t3[i % len(t3)]: # 3 
            order[2] += 1

    for i in range(len(order)): # 앞 사람부터 최댓값 탐색 : 자동으로 오름차순
        if order[i] == max(order): 
            answer.append(i+1)      

    return answer

 

enumerate를 이용하여 푼 것도 봤는데 꽤나 참신했다.

3명의 리스트에 대해 if문을 3번 돌리는 걸 이중 리스트를 만들고, enumerate(p)를 이용하여 아주 간결하게 해결한다.

그리고 오름차순으로 정렬하는 것도 list comprehension으로 해결했다.

두 문법 다 알고는 있지만 활용하기란 너무 어렵다. ㅜㅜ

 

# 다른 풀이
def solution(answers):
    answer = []
    person = [0] * 3
    p = [[1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]]  
    
    for a,b in enumerate(answers):
        for c,d in enumerate(p):
            if b == p[c][a % len(p[c])]:
                person[c] += 1
            
    for i in range(len(person)):
        if person[i] == max(person):
            answer.append(i+1)      
                
    return answer