문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
# 수포자 삼인방 a = [1, 2, 3, 4, 5] b = [2, 1, 2, 3, 2, 4, 2, 5] c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] def solution(anss): # 무조건 len(anss)이상만 되도록 곱해주기 a1 = [1, 2, 3, 4, 5] * (len(anss)//len(a)+1) b1 = [2, 1, 2, 3, 2, 4, 2, 5] * (len(anss)//len(b)+1) c1 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * (len(anss)//len(c)+1) a_cnt = 0 b_cnt = 0 c_cnt = 0 ans = [] bin = [] for i in range(len(anss)) : # anss 개수만큼 if a1[i] == anss[i]: a_cnt += 1 # 5 if b1[i] == anss[i]: b_cnt += 1 # 0 if c1[i] == anss[i]: c_cnt += 1 # 0 # 순서대로 bin에 append bin.append(a_cnt) #5 bin.append(b_cnt) #0 bin.append(c_cnt) #0 if bin.count(max(bin)) == 1: max1 = bin.index(max(bin)) ans.append(max1+1) elif bin.count(max(bin)) == 3 : ans = [1, 2, 3] elif bin.count(max(bin)) == 2 : if bin[0] == bin[1] : ans = [1, 2] elif bin[1] == bin[2] : ans = [2, 3] elif bin[0] == bin[2] : ans = [1, 3] return ans
- 🐱👤 무자비하게 코딩했더니 통과 ㅋㅋ 웃기다, 코드가 지저분하다!ㅋㅋ
- 목적 : len(수포자 3인방 정답) > len(anss), 카운팅값 순서대로 bin에 append해서 비교
- 배운 것
for 문을 if문에 동일하게 적용하려면 if→if→if로 해야함
elif로 하면 올바른 결과값이 나오지 않았음
def solution(answers): answer = [] A = [1, 2, 3, 4, 5] B = [2, 1, 2, 3, 2, 4, 2, 5] C = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] score = [0, 0, 0] for idx, n in enumerate(answers): if n == A[idx%len(A)]: score[0] += 1 if n == B[idx%len(B)]: score[1] += 1 if n == C[idx%len(C)]: score[2] += 1 for ind, s in enumerate(score): if s == max(score): answer.append(ind+1) return answer