프로그래머스 완전탐색 1.모의고사

Jamwon·2021년 4월 7일
0

알고리즘

목록 보기
1/18

문제링크
간단한 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 리스트에 추가해줘야된다.

엄청나게 쉬운문제인데 미련하게 풀려다가 오래걸린 케이스..
내장함수를 꺼리낌없이 마음껏 사용하자!!!

profile
한걸음씩 위로 자유롭게

0개의 댓글