🤔 나의 풀이 1
📌 문제
- 프로그래머스 코딩테스트 연습 > 완전탐색 > Level 1 모의고사
📌 날짜
2020.03.01
📌 시도 횟수
2 try
def solution(answers):
s1, s2, s3 = 0, 0, 0
p1 = [1, 2, 3, 4, 5]
p2 = [2, 1, 2, 3, 2, 4, 2, 5]
p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
l1, l2, l3 = len(p1), len(p2), len(p3)
for i in range(len(answers)):
if p1[i % l1] == answers[i]:
s1 += 1
if p2[i % l2] == answers[i]:
s2 += 1
if p3[i % l3] == answers[i]:
s3 += 1
answer = []
max_score = max(s1, s2, s3)
if s1 == max_score:
answer.append(1)
if s2 == max_score:
answer.append(2)
if s3 == max_score:
answer.append(3)
return answer
💡 문제 해결 방법
- 모든 answers에 대하여 각각 p1, p2, p3 이 세 사람의 찍는 방식을 완전탐색으로 하나씩 비교했다.
- 단, 세 사람의 인덱스를 한꺼번에 처리하기 위해
-----------------------------------------
for i in range(len(answers)):
if p1[i % l1] == answers[i]:
s1 += 1
if p2[i % l2] == answers[i]:
s2 += 1
if p3[i % l3] == answers[i]:
s3 += 1
-----------------------------------------
와 같이 나머지 연산으로 i는 동일하더라도 각 사람마다 실제 처리되는 인덱스가 달라지게 설정했다.
💡 새롭게 알게 된 점
-
❌ (한번에 맞추지 못한 경우) 오답의 원인
- 문제 이해를 잘못했다.
- 실제 정답도 사람이 찍는 것 처럼 특정 숫자가 계속 반복된다는 줄...ㅎ
😋 조금 더 최적화 시킨 코드
- 위에 코드랑 거의 비슷한데
s
(점수)를 list로 처리해서 코드 아래쪽의 answer을 구하는 부분이 좀 더 깔끔해졌다😘
def solution(answers):
s = [0, 0, 0]
p1 = [1, 2, 3, 4, 5]
p2 = [2, 1, 2, 3, 2, 4, 2, 5]
p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
l1, l2, l3 = len(p1), len(p2), len(p3)
for i in range(len(answers)):
if p1[i % l1] == answers[i]:
s[0] += 1
if p2[i % l2] == answers[i]:
s[1] += 1
if p3[i % l3] == answers[i]:
s[2] += 1
answer = []
max_score = max(s)
for idx, score in enumerate(s):
if score == max_score:
answer.append(idx + 1)
return answer