문제
https://programmers.co.kr/learn/courses/30/lessons/42840?language=python3
풀이
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
지문이 웃겼던 문제
def solution(answers):
s1 = [1,2,3,4,5] * -(-len(answers)//5)
s2 = [2,1,2,3,2,4,2,5] * -(-len(answers)//8)
s3 = [3,3,1,1,2,2,4,4,5,5] * -(-len(answers)//10)
answer = [0, 0, 0]
for i in range(len(answers)) :
if answers[i] == s1[i] :
answer[0] += 1
if answers[i] == s2[i] :
answer[1] += 1
if answers[i] == s3[i] :
answer[2] += 1
return [i for i, a in enumerate(answer,start=1) if a==max(answer)]
음수로 나누고 올림처리 하던 그 풀이를 응용해봤다.
문제가 쉽다 했더니 레벨1이네…
더 나은 풀이
def solution(answers):
p = [[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
s = [0] * len(p)
for q, a in enumerate(answers):
for i, v in enumerate(p):
if a == v[q % len(v)]:
s[i] += 1
return [i + 1 for i, v in enumerate(s) if v == max(s)]
나머지 연산으로 문제를 비교하는 코드
from itertools import cycle
def solution(answers):
giveups = [
cycle([1,2,3,4,5]),
cycle([2,1,2,3,2,4,2,5]),
cycle([3,3,1,1,2,2,4,4,5,5]),
]
scores = [0, 0, 0]
for num in answers:
for i in range(3):
if next(giveups[i]) == num:
scores[i] += 1
highest = max(scores)
return [i + 1 for i, v in enumerate(scores) if v == highest]
cycle함수를 이용해서 패턴을 만들고
이걸 next함수를 이용해서 패턴원소 중 하나를 가져온다.
가장 파이썬스럽게 푼 문제로 보인다.
댓글남기기