728x90
📖 풀이
우선 규칙을 나타내는 리스트들을 나열하고 그것을 answers와 비교해 1, 2, 3번 플레이어의 count를 하나씩 올려주었다.
그다음 이 3개의 count 중 max 값을 answer에 넣어주고 sort 해주어 문제를 풀었다.
하나하나 하드 코딩해서 코드가 매우 길다
def solution(answers):
answer = []
length = len(answers)
temp2 = [2, 1, 2, 3, 2, 4, 2, 5]
temp3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
a = []
b = []
c = []
for i in range(length):
a.append(i % 5 + 1)
for i in range(length):
if (i % 2) == 0:
b.append(temp2[i % 8])
else:
b.append(temp2[i % 8])
for i in range(length):
if (i % 10) < 2:
c.append(temp3[0])
elif (i % 10) < 4:
c.append(temp3[2])
elif (i % 10) < 6:
c.append(temp3[4])
elif (i % 10) < 8:
c.append(temp3[6])
else:
c.append(temp3[8])
a_count = 0
b_count = 0
c_count = 0
for i in range(len(answers)):
if answers[i] == a[i]:
a_count += 1
if answers[i] == b[i]:
b_count += 1
if answers[i] == c[i]:
c_count += 1
if max(a_count, b_count, c_count) == a_count:
answer.append(1)
if max(a_count, b_count, c_count) == b_count:
answer.append(2)
if max(a_count, b_count, c_count) == c_count:
answer.append(3)
answer.sort()
return answer
📌 다른 풀이
코드가 너무 복잡해 분명 다른 좋은 풀이가 있을 거라고 생각해 찾아봤다. 이 풀이는 규칙을 1, 2, 3 배열해놓고 enumerate를 적극 활용해 score에 맞춘 정답수를 저장해놓고 그중 max인 값의 인덱스를 result에 넣어 정답을 구한 기발한 풀이였다.
def solution(answers):
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
score = [0, 0, 0]
result = []
for idx, answer in enumerate(answers):
if answer == pattern1[idx%len(pattern1)]:
score[0] += 1
if answer == pattern2[idx%len(pattern2)]:
score[1] += 1
if answer == pattern3[idx%len(pattern3)]:
score[2] += 1
for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)
return result
'Algorithm' 카테고리의 다른 글
[파이썬] 프로그래머스 64061(크레인 인형뽑기 게임) (0) | 2022.01.19 |
---|---|
[코틀린] 프로그래머스 42840(모의고사) (0) | 2022.01.19 |
백준 알고리즘 파이썬(Python) 1009번 분산처리 (0) | 2022.01.05 |
리트코드(LeetCode) 561번 배열 파티션(Array Partition) (0) | 2021.09.27 |
리트코드(LeetCode) 238번 자신을 제외한 배열의 곱(Product of Array Except Self) (3) | 2021.09.27 |