[프로그래머스] 모의고사

박신희·2022년 4월 7일
0
post-thumbnail

🤜 풀이

def solution(answers):
    score = [0,0,0,0]	# 맞은 개수 count하는 리스트 
    max_score=0

    one=[1,2,3,4,5]*2000				# 최대 길이(10000) list로 만듦
    two=[2,1,2,3,2,4,2,5]*1250
    three=[3,3,1,1,2,2,4,4,5,5]*1000
    
    for i in range(len(answers)):		# 정답 체크해서 점수 +1하는 반복문
        if one[i]==answers[i]:
            score[1]+=1
        if two[i]==answers[i]:
            score[2]+=1
        if three[i]==answers[i]:
            score[3]+=1
            
    max_score=max(score)			# 최고 점수 기록
    answer=[ i for i in range(len(score))  if max_score ==score[i]] #최고점수 for문을 통해 추출 (단일값 뿐만 아니라 여러개 출력하기 위해서 반복문 사용, max함수로 골라낼 수 없기때문에)
    return answer

마지막 부분에서 최고점수를 가지고있는 학생을 출력할 때, 여러명일 경우 어떻게 출력할지 고민을 했었다. 그 전에는 max함수로 단일값만 뽑아냈었기 떄문!
for 문을 사용해서 max값이면 index를 추출하는 형식으로 구현했다.
.

여기서, 나는 제한조건에 시험은 최대 10,000 문제로 구성되어있습니다. 를 보고 one, two, three 모두 최대 길이 list를 만들었는데
이 방법 말고도

	one=[1,2,3,4,5]
    two=[2,1,2,3,2,4,2,5]
    three=[3,3,1,1,2,2,4,4,5,5]
    
    for i in range(len(answers)):		# 정답 체크해서 점수 +1하는 반복문
        if one[i%5]==answers[i]:
            score[1]+=1
        if two[i%8]==answers[i]:
            score[2]+=1
        if three[i%10]==answers[i]:
            score[3]+=1

각 index를 %를 활용해 구현하는 방법이 있다.
one 같은 경우는 1,2,3,4,5, 1,2,3,4,5, ,, 방식으로 반복적인 패턴을 가지니까
1번째 답도 1, 6번째 답도 1 이다. 즉, 5n+1번째 답은 무조건 1이라는 것이다!
그래서 굳이 최대길이 list를 만들지 안아도 구현할 수 있다.

profile
log my moments 'u')/

0개의 댓글