알고리즘

[프로그래머스 고득점 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)]
반응형