문제링크
간단한 brute force문제이다.
1,2,3명의 사람이 찍는 패턴이있는데 정답을 list형태로 주고 가장 높은 정답을 받은 사람을 return 여러명일 경우에 오름차순으로 정렬해서 return 하는거다.
def solution(answers):
answer = []
i = 0
list1 = [0, 0, 0]
lost1 = [1, 2, 3, 4, 5]
lost2 = [2, 1, 2, 3, 2, 4, 2, 5]
lost3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
for i in range(len(answers)):
if answers[i] == lost1[i % 5]:
list1[0] += 1
if answers[i] == lost2[i % 8]:
list1[1] += 1
if answers[i] == lost3[i % 10]:
list1[2] += 1
max1 = list1.index(max(list1))
answer.append(max1)
# print((list1.index(max(list1))))
return answer
위와 같이 멍청하게 풀었더니 최대값이 여러개일경우에 처리가 매우 복잡해진다.. 처음에는 저 answer.append(max1)문뒤에다가 if문을 또 넣어서 처리할려고 했지만 코드가 너무 지저분해지고 수포자의 수가 적었기 때문에 할수있기때문에 하다가 포기했다.
문제 풀때 enumerate를 안쓰고 풀어볼려했는데 되지 않았다 사실 안쓰고 풀려던 내가 미련한거였을지도..!
enumerate함수
enumerate 는 열거한다는 뜻으로 리스트,튜플,문자열등을 입력받아서 인덱스 값을 포함하는 enumerate 객채를 돌려준다 .
가령 위의 문제처럼 list1에 [0 , 3, 5] 값이 들어갔다고 하면
for i, lost in enumerate(list1):
print(i, lost)
이런식으로 출력을 하면
0 0
1 3
2 5 가 출력된다!
리스트를 인덱스값과 함께 쭈욱 열거해준다고 보면된다.
for문과 같이 많이쓰인다!!
그래서 enumerate 함수를 써서 다시 풀어보면
def solution(answers):
answer = []
i = 0
list1 = [0, 0, 0]
lost1 = [1, 2, 3, 4, 5]
lost2 = [2, 1, 2, 3, 2, 4, 2, 5]
lost3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
for i in range(len(answers)):
if answers[i] == lost1[i % 5]:
list1[0] += 1
if answers[i] == lost2[i % 8]:
list1[1] += 1
if answers[i] == lost3[i % 10]:
list1[2] += 1
for lost, score in enumerate(list1):
if score == max(list1):
answer.append(lost+1)
return answer
문제를 이런식으로 수포자 1,2,3번의 list를 각각 list의 길이만큼 나머지로 for문을 돌려줘서 answers list와 비교해서 같으면
list1 에 저장되어있는 정답을 1씩 늘려준다
그리고 enumerate함수를 이용해서 점수가 max인사람들을 순차적으로
따로만들어둔 answer list에 append해준다. 여기서 index 0,1,2 가 수포자 1,2,3 이므로 +1해서 answer 리스트에 추가해줘야된다.
엄청나게 쉬운문제인데 미련하게 풀려다가 오래걸린 케이스..
내장함수를 꺼리낌없이 마음껏 사용하자!!!