코딩테스트
[파이썬] 모의고사 [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