알고리즘
[프로그래머스 고득점 Kit] (완전탐색) - 모의고사
김치말이삼겹살
2024. 3. 6. 00:56
고민했던 부분:
마지막 최대 사람 출력하는 리스트 만들기.
max 값을 지정하고, 그것에 맞는 인덱스를 출력하기 위해 enumerate 함수 사용한다는 아이디어 떠올리는 데 시간이 좀 걸렸다.
그리고 변수명과, 문제에 주어진 조건을 잘 해독 못해서 문제 푸는 데 오래 걸린 경향도 있었다.
이런 문제가 안생기도록 노력해야지 !
def solution(answers):
a1=0
a2=0
a3=0
l1=[1,2,3,4,5]
l2=[2,1,2,3,2,4,2,5]
l3=[3,3,1,1,2,2,4,4,5,5]
for a in range(len(answers)):
if l1[a%5]==answers[a]:
a1+=1
if l2[a%8]==answers[a]:
a2+=1
if l3[a%10]==answers[a]:
a3+=1
a_1 = [a1,a2,a3]
m_val = max(a_1)
answer =[]
for idx, num in enumerate(a_1):
if num == m_val:
answer.append(idx+1)
return answer
아래 풀이는 다른 분들이 푼 풀이를 가져온 것인데, 되게 간결해보여서 나도 이렇게 풀고 싶다는 생각이 들어 가져와봤다.
코드에 주석을 달면 아래와 같다.
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]]
# 결과 담아둘 리스트 선언 -> 총 3명의 사람이므로 len(p)= 3
s = [0] * len(p)
# input list answers를 순회하며 answer 에 대한 index와 그에 대한 값 a를 받음
for q, a in enumerate(answers):
# 각 사람들의 답안을 순회 -> 3번 돎
for i, v in enumerate(p):
# 정답과 사람의 찍는 리스트와 맞는 인덱스 대조 -> 이게 진짜 간결하다고 생각한 부분...
if a == v[q % len(v)]:
# 해당 사람의 정답 리스트에 1 추가
s[i] += 1
# 결과값 리턴, s에 해당하는 인덱스와, 최댓값이면 1 increment하는 매우 간결한 코드...!
return [i + 1 for i, v in enumerate(s) if v == max(s)]
반응형